C# 在局部视图MVC5之间传递viewmodel
我有一个主视图和两个局部视图。我需要能够使用第一个局部视图中的值填充viewmodel,并在单击按钮时将viewmodel传递给第二个局部视图。按钮位于第二个局部视图中。我已经编写了一个javascript函数来实现这一点,但是当我检查controller方法时,viewmodel是空的。正如您在服务框下方的屏幕截图中所看到的,这是第二个局部视图 第一部分视图C# 在局部视图MVC5之间传递viewmodel,c#,asp.net,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc 5,我有一个主视图和两个局部视图。我需要能够使用第一个局部视图中的值填充viewmodel,并在单击按钮时将viewmodel传递给第二个局部视图。按钮位于第二个局部视图中。我已经编写了一个javascript函数来实现这一点,但是当我检查controller方法时,viewmodel是空的。正如您在服务框下方的屏幕截图中所看到的,这是第二个局部视图 第一部分视图 @model CC.GRP.MCRequest.ViewModels.NewRequestViewModel <div id="
@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>
第二部分视图
@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>
以下是我对您如何解决任务的建议:
当ajax方法完成原始提交事件时,此步骤对于不清理表单是必需的success
,并在该属性中编写一个函数,以手动方式更新第二个部分表单:
function mapInit() {
$.ajax({
url: '@Url.Action("Service", "request")',
// datatype: "json",
data: $('form').serialize(), // update this
type: "POST",
success: function (data)
{
var html = $(data).find('form').html();
$('#NewRequest').find('form').html(html);
}
});
}
3) 创建Jquery方法以在成功时获取请求,并在UI中将第一个部分视图内容替换为第二个部分视图内容。(例如:$(“#PartialView1Container”).html(result);发出AJAX请求是一个完全独立的请求-响应周期,与初始视图呈现期间服务器端发生的情况完全分离。如果您需要那里的信息,您必须将其与AJAX请求一起发布,或者在那里重建。对不起,chris。我不明白你的意思。你能给我举个例子吗?我可以在controller中看到视图模型值,但是在客户端,当我发出警报检查模型数据时,它显示为空白。我注意到的另一件事是,我的视图中没有任何称为表单的元素。您是否认为这就是表单元素应该围绕整个页面(即视图本身)而不是单独包含在部分视图中的原因。除非您的局部视图正在执行某种类型的提交操作。此外,您可以在视图本身中设置模型,然后使用相同的模型向下进入每个局部视图。