我很新的MVC,并尝试将现有的网站移植到MVC4时遇到此问题。MVC4从视图传递复杂的对象到控制器,新的视图不是渲染
我们使用的模型中大部分数据都是通过服务调用填充的,所以显然我们希望将调用保持为最小值。问题是,当我试图将模型传递回控制器时,模型中的复杂对象总是变为空。我能够使用ajax将数据保存到控制器的回调中;然而,我需要动作来返回一个新的视图,并在动作完成后,视图的代码执行,但没有重定向(我认为这是ajax的重点,我想我要求的是一个解决方案将以相同的方式保留数据,但实际上会重定向)。
这里是我的模型:
public class DistributionModel
{
public string typeOfDistribution { get; set; }
public Document document { get; set; }
public string thumbnailUrl { get; set; }
public MergeFieldModel mergeFields { get; set; }
}
public class MergeFieldModel
{
public MergeFields documentMergeFields { get; set; }
}
这里是我使用的控制器动作:
public ActionResult Index(DistributionModel distributionModel)
{
distributionModel.mergeFields = new MergeFieldModel() { documentMergeFields = MergeFieldsHelper.GetDocumentMergeFields(distributionModel.document.Id) };
return View("Index", distributionModel);
}
我试图用一个[email protected]( “指数”,型号),而不是下面的块中的按钮来调用控制器并执行重定向(重定向本身确实有效,但是之后我必须在控制器内执行另一个服务调用以检索与我从调用视图一起工作的相同文档),因为模型中的Document对象对c继续返回NULL ontroller。
以下是调用控制器并实际返回完整模型的视图部分:我认为我正在寻找的是一种无ajax的方法,以便我可以重定向到分发/索引页面(这是从分发/ DocumentDetails页面)
<button id="EmailDistribution" data-corners="false" data-theme="a">EMAIL</button>
$('#EmailDistribution').click(function() {
var model = @Html.Raw(Json.Encode(Model));
$.ajax({
url: '@Url.Action("Index", "Distribution")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(model),
processData: false,
});
});
谢谢,任何帮助将非常感激。
为什么你只需'返回RedirectToAction(“Index”,distributionModel);'作为'Distribution/DocumentDetails'行为的最后一行? – Suhas
DocumentDetails操作返回DocumentDetails视图。另外,我尝试从一个控制器方法中做一个RedirectToAction,并发现它将Document对象作为NULL传递给其他操作。 – gutsmania