【发布时间】:2017-09-02 23:33:28
【问题描述】:
我有一个主视图和两个部分视图。我需要能够使用我的第一个局部视图中的值填充视图模型,并在单击按钮时将视图模型传递给第二个局部视图。该按钮位于第二个局部视图中。我已经编写了一个 javascript 函数来做到这一点,但是当我检查控制器方法时视图模型是空的。正如您在下面的屏幕截图中看到的,服务框是第二个局部视图
第一部分视图
第二部分视图
@model CC.GRP.MCRequest.ViewModels.NewRequestViewModel
<div id="NewRequest">
<h1>Services</h1>
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.ProjectName, htmlAttributes: new { @class = "control-label col-md-5" })
@Html.EditorFor(model => model.ProjectName, new { htmlAttributes = new { @class = "form-control", style = "width:100%" } })
<input type="submit" value="Save" class="btn btn-default" onclick="mapInit()" />
}
</div>
<script type="text/javascript">
function mapInit() {
$.ajax({
url: '@Url.Action("Service", "request")',
// datatype: "json",
data: $('form').serialize(), // update this
type: "POST",
// contentType: 'application/json; charset=utf-8'
});
}
</script>
控制器
[HttpPost]
public PartialViewResult Service(NewRequestViewModel model)
{
return PartialView("_NewService", model);
}
【问题讨论】:
-
发出 AJAX 请求是一个完全独立的请求-响应周期,完全脱离了初始视图呈现期间服务器端发生的情况。如果您需要那里的信息,您必须将其与 AJAX 请求一起发布或在那里重建。
-
对不起,克里斯。我没听懂你。能给我举个例子吗
-
我可以在控制器中看到视图模型值,但是在客户端,当我发出警报以检查它显示为空白的模型数据时
-
我注意到的另一件事是我的视图中没有任何称为表单的元素。你认为这是原因吗
-
你的表单元素应该被包裹在整个页面上,也就是视图本身,而不是单独在部分视图中。那是除非您的部分视图正在执行某种提交。此外,您可以在视图本身中设置模型,然后使用相同的模型向下渗透到每个部分视图中。
标签: c# asp.net asp.net-mvc-5