我有一个带有文本框和下拉列表的主视图:
@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内的主视图中访问这些控件值?
修改 为了更清楚地按照评论中的建议解释这种情况,我的主视图基本上是一个带有文本框的搜索屏幕,其中一个下拉列表将被部分视图用于以后处理。
我的部分视图(以单独的形式)显示搜索结果以及内部的提交按钮,以根据结果处理某些任务。但是,此处理还需要第二个下拉列表的值和主视图中的文本框值。即使在加载部分视图后,也可以更改主视图中的这两个控件。因此,我希望找到一些方法在按下提交按钮时在主视图中获取这些值。
答案 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());
});
第二次下拉的方式相同。 希望你有这个主意。