我尝试将Jquery中的表单提交给Controller中的Action方法。 为此,我序列化我的表单并使用get方法。在控制器中,我收到我的表格作为字符串,如param1 = 1& param2 = 2 .... 有没有办法在我的Action Method中直接检索FormCollection而不是字符串。由于我的表单有很多复选框,因此我更容易将它放在formCollection中。
这是我的Jquery:
var form = $("#CheckForm");
var formCollection = form.serialize();
$.post('@Url.Action("CheckSelection")', { clientId: clientId, policyId: policyId, countryCode: country, month: monthtoken[0] + '*' + monthtoken[1], formCollection: formCollection }, function () {
alert("formSubmit");
});
这是我的表格:
@using (Html.BeginForm("CheckSelection", "Check", FormMethod.Post, new { id = "CheckForm" }))
{
<fieldset>
<div class="editor-label">
@Html.CheckBox("CodeExist",true)
@Html.Label("Check Code Existence")
</div>
<div class="editor-label">
@Html.CheckBox("Mandatory",true)
@Html.Label("Check Code Reccurence")
</div>
<div class="editor-label">
@Html.CheckBox("Reccurence",true)
@Html.Label("Check Mandatory Code")
</div>
}
这是我的行动方法:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CheckSelection(string clientId, string policyId, string countryCode, string month, FormCollection formCollection){}
提前感谢您的帮助!
答案 0 :(得分:7)
var form = $("#CheckForm");
var formCollection = form.serialize();
$.post('@Url.Action("CheckSelection")', formCollection , function (data) {
alert(data); //will alert form submitted
});
,控制器看起来像
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CheckSelection(FormCollection collection){
return Content("form submitted");
}
有关FormCollection类的详细信息,请按照此link
进行操作答案 1 :(得分:1)
因此,序列化表单非常适合将所有表单值传递给操作结果,但是使用序列化URL字符串会很麻烦,特别是当我已经使用FormCollection的名称/值组合时已经。我只是想通过jQuery而不是普通的表单提交来切换功能。为此,我编写了一个帮助函数,将序列化的表单转换为普通的表单集合,就像表单正常提交一样。
享受。
private FormCollection DeSerialize(FormCollection form)
{
FormCollection collection = new FormCollection();
//un-encode, and add spaces back in
string querystring = Uri.UnescapeDataString(form[0]).Replace("+", " ");
var split = querystring.Split(new [] {'&'}, StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (string s in split)
{
string text = s.Substring(0, s.IndexOf("="));
string value = s.Substring(s.IndexOf("=")+1);
if (items.Keys.Contains(text))
items[text] = items[text] + "," + value;
else
items.Add(text, value);
}
foreach (var i in items)
{
collection.Add(i.Key, i.Value);
}
return collection;
}
答案 2 :(得分:0)
我修改了上面@Aaron McCoy提供的方法来处理&#39;&amp;&#39;在输入中:
private FormCollection DeSerialize(string val)
{
FormCollection collection = new FormCollection();
//un-encode, and add spaces back in
var split = val.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (string s in split)
{
var v = Uri.UnescapeDataString(s).Replace("+", " ");
string text = v.Substring(0, v.IndexOf("="));
string value = v.Substring(v.IndexOf("=") + 1);
if (items.Keys.Contains(text))
items[text] = items[text] + "," + value;
else
items.Add(text, value);
}
foreach (var i in items)
{
collection.Add(i.Key, i.Value);
}
return collection;
}
希望有所帮助!