我目前正在建立一个网站,我必须从一个Ajax.BeginForm
更新两个单独的目标。我通过使用一个额外的容器来容纳两个单独的目标。如:
原始表格
@model Mod1
@using (Ajax.BeginForm("LoadData", new AjaxOptions{UpdateTargetID = "Div1"}))
{
<select id="sel1" name="sel1" onchange="$(this.form).submit">
// ...
</select>
}
@using (Ajax.BeginForm("ProcessData", new AjaxOptions{UpdateTargetID = "Div2"}))
{
<div id="Div1"></div>
// ...
<input type="submit" value="GO!" />
}
代码文件
public ActionResult LoadData(int sel1)
{
// loading data from database
return PartialView(mod1);
}
部分视图
@model Mod2
<select id="sel2" name="sel2">
@foreach (var item in Model.SelectItems)
{
<option value="@item.Value">@item.Text</option>
}
</select>
@foreach (var item in Model.CheckBoxItems)
{
<label>@item.Text<input type="checkbox" id="chk1" name="chk1" value="@item.Value"></label>
}
对于处理方法,我尝试过:
public ProcessData(Mod1 mod1, string[] chk1, int sel2)
但是,在提交表单时,我无法检索chk1或sel2的值。在调试模式下检查chk1和sel2时,chk1为空,而sel2为0(选择选项中没有这样的值)。任何人都可以提供一些见解的原因,以及我如何解决它。提前谢谢。
答案 0 :(得分:0)
如果我理解你的话,你可以做你想要的,你在同一个表格上有两个提交按钮,每个按钮都有一个单独的动作方法。这样,每个提交按钮都可以访问表单中的所有字段。有关如何执行此操作的详细说明,请参阅此处的答案:
How to use ajax link instead of submit button for form?
修改强>
响应评论:操作方法LoadData应返回包含其他两个控件的部分视图,并包含整个开始表单:
@using (Ajax.BeginForm("LoadData", new AjaxOptions{
UpdateTargetID = "Div1",
InsertionMode = InsertionMode.Replace
}))
{
<select id="sel1" name="sel1" onchange="$(this.form).submit">
// ...
</select>
}
<div id="Div1">
</div>
<div id="Div2">
</div>
将其移至另一个局部视图:
@using (Ajax.BeginForm("ProcessData", new AjaxOptions{UpdateTargetID = "Div2"}))
{
// ...
<input type="submit" value="GO!" />
}