C#ASP.net MVC4如何从部分视图ActionResult获取主视图控件值

时间:2015-03-31 08:48:42

标签: c# asp.net asp.net-mvc-4 razor partial-views

我有一个带有文本框和下拉列表的主视图:

@using (Ajax.BeginForm("GetResults", "SomeController", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "PartialDiv" }))

<select name ="dropdown1" onchange="$(this.form).submit();" >
    <option></option>                                                             
    @foreach (var recordrow in ...)                   
    {  
        <option value="@recordrow.Value" >@recordrow.Text</option>
    }
</select>

<select name ="dropdown2" >  
    <option></option>    
    @foreach (var recordrow in ...)
    {  
        <option value="@recordrow.Value" >@recordrow.Text</option>
    }
</select>
@Html.TextBox("textbox1", null, new { size = 10 })

<div id="PartialDiv" class="GroupBoxForeground" >
       @Html.Partial("PartialView")
    </div>

主视图上的某些控件填充了值后,主视图会自动呈现局部视图。在部分视图中,有一个调用ActionResult的提交按钮。

部分视图的一部分:

@using (Ajax.BeginForm("Function1", "SomeController", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "someDiv" }))
...
<input  type="submit" name="btn_submit"  value="Process" style="width:80px"  />

我的ActionResult看起来像这样:

[HttpPost]
public ActionResult Function1(FormCollection formdata, MasterModel MstModel)
{
    ...
}

我能够将Partial View中的值成功绑定到MasterModel。但是,在调用ActionResult时,我无法在主视图中获取控件的值。我在FormCollection中找不到密钥,并尝试使用我在部分视图中用于模型绑定的相同方法。

两个视图都使用MasterModel强类型。

由于在渲染部分视图后可以更改主视图中的值,因此在部分视图中单击提交按钮时,我需要再次获取值。有没有办法在部分视图的ActionResult内的主视图中访问这些控件值?

修改 为了更清楚地按照评论中的建议解释这种情况,我的主视图基本上是一个带有文本框的搜索屏幕,其中一个下拉列表将被部分视图用于以后处理。

我的部分视图(以单独的形式)显示搜索结果以及内部的提交按钮,以根据结果处理某些任务。但是,此处理还需要第二个下拉列表的值和主视图中的文本框值。即使在加载部分视图后,也可以更改主视图中的这两个控件。因此,我希望找到一些方法在按下提交按钮时在主视图中获取这些值。

1 个答案:

答案 0 :(得分:0)

所以你的意思是,你有两种不同的形式。在发布第二个表单时,您还希望发布第一个表单中控件的值。为此,您可以获取jquery的帮助,因为表单外的值未发布在submit上。

您可以在第二种形式(部分视图表单)中创建hidden字段,如下:

@Html.Hidden("dropdown1value", "", new { @id = "ddl1val" })
@Html.Hidden("dropdown2value", "", new { @id = "ddl2val" })

然后在dropdown1的更改事件中,你可以这样做:

//assuming 'dropdown1' is the `id` of your dropdown1
$("#dropdown1").change(function () {
      $("#ddl1val").val($("#dropdown1").val());

});

第二次下拉的方式相同。 希望你有这个主意。