具有重复名称值 MVC 的 Http Post
Http Post with duplicate name values MVC
在 MVC 中,我有一个使用大量重复信息的表单。基本上,他们单击一个按钮,然后弹出另一个 "form"(文本框下拉列表等)。然而,当他们单击提交按钮时,所有这些都会以相同的名称返回。我将如何着手使 Post 中的名称不同或能够将项目放入列表中?
我的代码:
@Html.TextBox("Textbox1", "", new { placeholder = "", size = "77", maxlength = "76" })
@Html.DropDownList("Country", ViewData["CountryOptions"] as SelectList,"Select", new { id = "Country"})</div>
<div class="pad5">
<span class="FieldLabel">Application *</span><span>@Html.DropDownListFor(model => model.ProductsID, Model.HowProductsAreUsedOptions, new { @class = "General", id = "General-1" })
@Html.DropDownListFor(model => model.ApplicationValue, Model.Options, "--Choose One--", new { id = "Option1", style = "display:none" })
</div>
他们提交时最多可以重复 9 次。然而,这将在 Post
中给我这个
FormID=8&Textbox1=This&Country=USA&ProductsID=1&ApplicationValue=2&
Textbox13=Is&Country=Canada&ProductsID=2&ApplicationValue=3&
Textbox14=A&Country=Canada&ProductsID=2&ApplicationValue=1&
Textbox15=Test&Country=Canada&ProductsID=1&ApplicationValue=8&
Textbox16=For&Country=Canada&ProductsID=2&ApplicationValue=1&
Textbox17=Stack&Country=USA&ProductsID=1&ApplicationValue=9&
Textbox18=Overflow&Country=USA&ProductsID=2&ApplicationValue=2
我怎样做才能将它们分成 7 个不同的值集,而不是只给我一个值集?
如果我是你,我会创建一个强类型视图模型来表示你的数据。
一个表示每个项目及其中的属性。
public class FooModel
{
public string Text { get; set; }
public string Country { get;set;}
public int ProductsID { get; set; }
public int ApplicationValue { get; set; }
}
然后创建一个模型来容纳它们并代表它们
public class FooViewModel
{
public List<FooModel> Foos { get; set; }
}
然后您可以从您的控制器 return FooViewModel
的一个实例。
在您看来,您使用集合的名称索引如下:
@for (var i = 0; i < Model.Foos.Count; i++)
{
...
@Html.TextBoxFor(model => Model[i].Text)
@Html.DropDownListFor(model => Model[i]Country, ViewData["CountryOptions"] as SelectList,"Select")
@Html.HiddenFor(model => Model[i].ProductsID)
...
}
HiddenFor 也会 post 返回这些值。
现在在您的操作中,您只需更改参数以获取 FooViewModel
的实例,它们将全部填充到服务器端。
有关它的更多信息,请参见此处:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
在 MVC 中,我有一个使用大量重复信息的表单。基本上,他们单击一个按钮,然后弹出另一个 "form"(文本框下拉列表等)。然而,当他们单击提交按钮时,所有这些都会以相同的名称返回。我将如何着手使 Post 中的名称不同或能够将项目放入列表中?
我的代码:
@Html.TextBox("Textbox1", "", new { placeholder = "", size = "77", maxlength = "76" })
@Html.DropDownList("Country", ViewData["CountryOptions"] as SelectList,"Select", new { id = "Country"})</div>
<div class="pad5">
<span class="FieldLabel">Application *</span><span>@Html.DropDownListFor(model => model.ProductsID, Model.HowProductsAreUsedOptions, new { @class = "General", id = "General-1" })
@Html.DropDownListFor(model => model.ApplicationValue, Model.Options, "--Choose One--", new { id = "Option1", style = "display:none" })
</div>
他们提交时最多可以重复 9 次。然而,这将在 Post
中给我这个FormID=8&Textbox1=This&Country=USA&ProductsID=1&ApplicationValue=2&
Textbox13=Is&Country=Canada&ProductsID=2&ApplicationValue=3&
Textbox14=A&Country=Canada&ProductsID=2&ApplicationValue=1&
Textbox15=Test&Country=Canada&ProductsID=1&ApplicationValue=8&
Textbox16=For&Country=Canada&ProductsID=2&ApplicationValue=1&
Textbox17=Stack&Country=USA&ProductsID=1&ApplicationValue=9&
Textbox18=Overflow&Country=USA&ProductsID=2&ApplicationValue=2
我怎样做才能将它们分成 7 个不同的值集,而不是只给我一个值集?
如果我是你,我会创建一个强类型视图模型来表示你的数据。
一个表示每个项目及其中的属性。
public class FooModel
{
public string Text { get; set; }
public string Country { get;set;}
public int ProductsID { get; set; }
public int ApplicationValue { get; set; }
}
然后创建一个模型来容纳它们并代表它们
public class FooViewModel
{
public List<FooModel> Foos { get; set; }
}
然后您可以从您的控制器 return FooViewModel
的一个实例。
在您看来,您使用集合的名称索引如下:
@for (var i = 0; i < Model.Foos.Count; i++)
{
...
@Html.TextBoxFor(model => Model[i].Text)
@Html.DropDownListFor(model => Model[i]Country, ViewData["CountryOptions"] as SelectList,"Select")
@Html.HiddenFor(model => Model[i].ProductsID)
...
}
HiddenFor 也会 post 返回这些值。
现在在您的操作中,您只需更改参数以获取 FooViewModel
的实例,它们将全部填充到服务器端。
有关它的更多信息,请参见此处:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/