我为键值对输入创建了动态表单,某些值将包含逗号:
using(Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "parameterForm" }))
{
<div id="inputBoxesDIV">
for(int i = 0; i < Model.GetParameters().Count; i++)
{
Html.TextBoxFor(m => m.GetParameters().ElementAt(i).Name, new { name = "name" + i, size = 20 })
Html.TextBoxFor(m => m.GetParameters().ElementAt(i).Value, new { name = "Value" + i, size = 60 })
}
</div>
}
我尝试使用FormCollection来获取这样的对:
[HttpPost]
public ActionResult Index(FormCollection formCollection)
{
foreach (var key in formCollection.AllKeys)
{
var value = formCollection[key];
}
foreach (var key in formCollection.Keys)
{
var value = formCollection[key.ToString()];
}
//etc...
但是FormCollection使用逗号分隔的字符串,所以它没有用。
有什么方法我仍然可以使用FormCollection或者你知道我怎么解决它?
答案 0 :(得分:0)
我认为你应该能够根据动态生成的模型生成一个视图,为此你不应该让你有机会对keyvalue对的名称部分进行更改,所以删除文本框就好了,
using(Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "parameterForm" }))
{
<div id="inputBoxesDIV">
for(int i = 0; i < Model.GetParameters().Count; i++)
{
<label>Model.GetParameters().ElementAt(i).Name</label>
Html.TextBoxFor(m => m.GetParameters().ElementAt(i).Value, new { name =Model.GetParameters().ElementAt(i).Name , size = 60 })
}
</div>
}
因此用户将对值文本框进行更改,因此在他提交您的能够使用键名读取所有值后,
[HttpPost]
public ActionResult Index(FormCollection formCollection)
{
foreach (var key in formCollection.AllKeys)
{
var value = formCollection[key];
}
foreach (var key in formCollection.Keys)
{
var value = formCollection[key.ToString()];
}
}
如果您想让用户能够修改键值对中的名称和值,那么您应该尝试这样做,
using(Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "parameterForm" }))
{
<div id="inputBoxesDIV">
for(int i = 0; i < Model.GetParameters().Count; i++)
{
<input type="text" name="@String.Format("name{0}",i)" value="@Model.GetParameters().ElementAt(i).Name" size="20"/>
<input type="text" name="@String.Format("value{0}",i)" value="@Model.GetParameters().ElementAt(i).Value" size="60"/>
}
</div>
}
并在你的帖子中,
[HttpPost]
public ActionResult Index(FormCollection formCollection)
{
for(int i=0;i<formCollection.AllKeys.Length;i++)
{
var value = formCollection["value"+i];
var name=formCollection["name"+i];
}
}
希望这有帮助。
答案 1 :(得分:0)
为什么不使用模型绑定:
public class KeyValue
{
public string Name { get; set; }
public string Value { get; set; }
}
public class Test
{
public IEnumerable<KeyValue> KV { get; set; }
}
并且在视野中:
@using(Html.BeginForm())
{
for (var kv = 0; kv < Model.KV.Count(); ++kv)
{
@Html.TextBox("KV[" + kv + "].Name", Model.KV.ElementAt(kv).Name);
@:<br />
@Html.TextBox("KV[" + kv + "].Value", Model.KV.ElementAt(kv).Value);
@:<br />
}
@:<input type="submit" />
}
在cotroller中获取你的模型:
[HttpPost]
public ActionResult Index(Test model)
{
...
}