我对 MVC 非常陌生,并且在尝试将现有站点移植到 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);
}
我尝试使用 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,
});
});
谢谢,任何帮助将不胜感激。