JQuery Post Form в ASP.NET MVC 3.0 FormCollection - PullRequest
2 голосов
/ 25 января 2012

Я пытаюсь отправить форму в Jquery методу Action в контроллере.Для этого я сериализую свою форму и использую метод get.В контроллере я получаю свою форму в виде строки типа param1 = 1¶m2 = 2 .... Есть ли способ получить непосредственно 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){}

Заранее благодарен за помощь!

Ответы [ 3 ]

7 голосов
/ 25 января 2012
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 перейдите по этой ссылке

1 голос
/ 07 ноября 2013

Итак, сериализация формы отлично работает для передачи всех значений формы в результат действия, но тогда становится затруднительно работать с сериализованной строкой 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;
}
0 голосов
/ 22 июля 2017

Я изменил метод, предоставленный @Aaron McCoy выше, для обработки '&' на входе:

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;
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...