在我的项目中,我在同一页面上有多个表单,我想在一个页面中传递给控制器。 如何实现?
<script>
function onSaveButtonClicked() {
var form = $("#SaveForm").serialize();
var form2 = $("#SaveForm").serialize();
$.ajax({
url: '@Url.Action("Filter","SearcherEngine")',
type: 'post',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({ model: form, model2: form2 }),
cache: false,
success: function (result) {
alert(result);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError);
}
});
};
[HttpPost]
public ActionResult Filter(MyViewMOdel model,MyViewModel2 model2)
{
}
答案 0 :(得分:1)
这种复杂的原因是每种形式的不同视图模型。因此,您不能简单地使用数组并映射到公共类的列表。
请记住,模型绑定是基于传递的对象的结构(在本例中发布)完成的。所以你需要做的是创建一个模型,它可以保存你想要传递给c#的结构,然后也在javascript中创建相同的结构来传入。
public class ViewModelSet
{
public MyViewModel model1 { get; set; }
public MyViewModel1 model2 { get; set; }
}
现在您需要在javascript中使用完全相同的属性命名重新创建此结构
var form1 = ...;
var form2 = ...;
var modelSet = {};
modelSet.model1 = form1;
modelSet.model2 = form2;
接下来传入(仅参数名称必须与预期参数服务器端的名称匹配)
data: { model : modelSet },
并希望这可以通过服务器端
public ActionResult FilterNCTS(ViewModelSet model)
{
//Now you should be able to have access to nested models
// TODO: work with model.model1
...
}
答案 1 :(得分:0)
我在一个模型中加入了两个模型,并围绕一个表单包装了部分视图。
class MyModel
{
...
}
@model MyModel;
@using(Html.BeginForm())
{
Html.RenderPartial("Path",Model);
Html.RenderPartial("Path",Model);
}