1

我目前正在构建一个网站,我必须从一个Ajax.BeginForm. 我通过使用一个额外的容器来容纳两个单独的目标来让它工作。如:

  1. 原始表格

    @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!" />
    }
    
  2. 代码文件

    public ActionResult LoadData(int sel1)
    {
      // loading data from database
      return PartialView(mod1);
    }
    
  3. 局部视图

    @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(选择选项中没有这样的值)。任何人都可以提供一些有关此原因的见解以及我如何解决它。先感谢您。

4

1 回答 1

0

如果我对你的理解正确,你可以做你想做的事情,在同一个表单上有两个提交按钮,每个按钮调用一个单独的操作方法。这样每个提交按钮都可以访问表单中的所有字段。有关如何执行此操作的详细说明,请参见我的答案:

如何使用 ajax 链接而不是表单的提交按钮?

编辑

作为对评论的回应:操作方法 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!" />
    }
于 2013-08-30T07:12:19.110 回答