ASP.NET MVC控制器方法中HTTpPost方法的多个参数类型
本文关键字:方法 参数 类型 NET MVC 控制器 ASP HTTpPost | 更新日期: 2023-09-27 18:26:49
我有一个页面,我想在上面显示两组信息:
<div id="DivMainContainer">
<fieldset>
<legend>Settings</legend>
@using (Ajax.BeginForm("Index", "Settings", null))
{
<table id="TableMain" style="width: 100%">
<tr>
<td style="width: 50%;vertical-align:top">
@*@Html.Partial("_TableColumnNames")*@
@Html.CheckBoxListFor(model=>model.PostedColumns.ColumnIds,
model=>model.AllColumns,
columnItem=>columnItem.Id,
columnItem=>columnItem.ColumnName,
model=>model.SelectedColumns,
Position.Vertical)
</td>
<td>
<table id="TableGridSettings">
<tr>
<td class="FirstCell">
#Records per page
</td>
<td>
</td>
</tr>
<tr>
<td class="FirstCell">
</td>
<td>
</td>
</tr>
<tr>
<td class="FirstCell">
</td>
<td>
</td>
</tr>
<tr>
<td class="FirstCell">
<label id="LabelGridRowCount" for="InputGridRowCount">
Snapshot Grids</label>
</td>
<td>
<input type="text" id="InputGridRowCountSG" name="InputGridRowCount" />
</td>
</tr>
<tr>
<td class="FirstCell">
Data Sets Grid
</td>
<td>
<input type="text" id="InputGridRowCountDST" name="InputGridRowCountDST" />
</td>
</tr>
<tr>
<td class="FirstCell">
Data Sources Grid
</td>
<td>
<input type="text" id="InputGridRowCountDSR" name="InputGridRowCountDSR" />
</td>
</tr>
<tr>
<td class="FirstCell">
</td>
<td>
</td>
</tr>
</table>
</td>
</tr>
</table>
<button>
Save</button>
}
</fieldset>
此表中的第一个单元格包含一个强类型(绑定模型)CheckBoxList,第二个单元格包含三个用于捕获信息的简单文本字段。
有一个保存按钮,它将导致以下方法的帖子:
[HttpPost]
public ActionResult Index(PostedColumns postedColumns)
{
try
{
return View(GetColumnsModel(postedColumns));
}
catch (Exception ex)
{
}
return View();
}
Post方法接受类型为"PostedColumns"的参数,因为这是我正在使用的CheckBoxList助手发布的信息类型。
现在我还想从其他三个简单的控件中收集信息,如果post方法修改如下,可以使用FormCollection来完成:
[HttpPost]
public ActionResult Index(FormCollection form)
{
try
{
//do something like form["txtInputId"]......to read values
}
catch (Exception ex)
{
}
return View();
}
但这意味着我现在无法从复选框列表中获取发布的信息。
寻找一些关于如何在单击保存时从这两个控件捕获/发布信息的指针。
Venkat指出,创建视图模型是您的最佳选择,但您也可以向POST方法添加其他参数
[HttpPost]
public ActionResult Index(PostedColumns postedColumns, string InputGridRowCount, string InputGridRowCountDST, string InputGridRowCountDSR)
{
...
或者您可以手动从Request.Form
中获取值
public ActionResult Index(PostedColumns postedColumns)
{
string inputGridRowCount = Request.Form["InputGridRowCount"];
....
将其他简单字段包含在同一模型中,这样您就可以在返回时从同一模型获得值。或者创建一个新的包装类作为模型,该模型将包含PostedColumns和与其他控件相关的属性。然后将此模型绑定到您正在使用的视图。然后使用创建的新模型更改动作后方法,该模型可以从视图模型中获取值。如果您提供了整个视图和模型,那么就可以很容易地以更好的方式检查解决方案。