我对MVC非常陌生,在尝试将一个现有网站移植到MVC4时遇到了这个问题。
我们使用的模型很多数据都是通过服务调用填充的,因此显然我们希望将调用保持最少。问题在于当我尝试将模型传回控制器时,模型内的复杂对象总是变成null。我已经能够通过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);
}
我尝试使用 href=@Url.Action("Index", Model) 替换下面的按钮来调用控制器并执行重定向(重定向本身是有效的,但我随后必须在控制器内执行另一个服务调用以检索与来自调用视图的相同文档一起使用的 Document 对象,因为该对象在模型中返回为 NULL)。以下是调用控制器并实际返回完整模型的视图部分:我认为我要找的是一种无需 ajax 就能实现这一点的方法,以便我可以获得重定向到 Distribution/Index 页面(这是从 Distribution/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,
});
});
谢谢,非常感谢您的帮助。
Distribution/DocumentDetails
操作的最后一行只写return RedirectToAction("Index", distributionModel);
? - Suhas