Извлечение значений атрибутов из FormCollection в Asp.net MVC - PullRequest
0 голосов
/ 27 января 2011

Мое приложение записывает пользовательские атрибуты для элементов управления вводом, используя классы Helper.А также мы загружаем UserControl динамически, поэтому нам нужно использовать FormCollection для получения опубликованных значений.Есть ли способ, которым мы можем получить доступ к значениям атрибута из объекта FormCollection.

Пример:

<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" />

Мой вопрос заключается в том, как я могу получить доступ к значению customAttr1 из приведенного выше, например, из контроллера.

Заранее спасибо за помощь ..

Ответы [ 3 ]

0 голосов
/ 27 января 2011

Простой ответ: нет, боюсь, formCollection содержит только основную информацию о ключе и значении.

Возможно, вам будет проще повторно обработать эту информацию, когда вы находитесь в контроллере?использование какой-то механики для определения того, что вы передали.

Альтернативой является то, что если у вас есть список элементов управления, которые сопоставляются с базовым типом, то вы можете циклически проходить через каждый элемент управления.

MVC - этонемного волшебства и может отображать свойства обратно в модель, даже в список.

Если у вас есть модель, у которой есть список элементов управления:

public class Control
{
    String Value {get; set;}
    String Attribute1 {get; set;}
}

public class ControlViewModel
{
    IList<Control> Controls {get; set;}
}

, то по вашему мнению:

for(var i = 0; i<controls.Count;i++)
{
   // Obviously this isnt complete right i needs to increment from 0; would be build using your htmlhelpers.
    <input id="Controls[i]_Value" name="Controls[i].Value" type="text" value="hello" />
    <input id="Controls[i]_Attribute1" name="Controls[i].Attribute1" type="hidden" value="Attribute" />
}

в вашем действии httppost вы можете затем собрать список ControlViewModel, и список Controls должен заполниться.

Я не проверял это, вероятно, есть много ошибок, но это должнобыть достаточно, чтобы начать;посты там, которые обсуждают это, если я найду их после публикации, я добавлю их.

0 голосов
/ 31 марта 2011

Как уже сказал Люк .. Form Collection является объектом словаря и содержит только имя, пару значений .. Чтобы передать эту вещь в контроллер, вам нужно передать этот пользовательский атрибут через ajax.

var form = $("#formid").serialize(),
    custom = $("input:text").attr("customAttr1").val();
$.ajax({ 
    type: "POST", 
    url: "/controller/ProcessData", 
    data:{collection :form,customAttr: custom },
    dataType: "html", 
    traditional: true
});

в контроллере вам нужно иметь следующий синтаксис:

public ActionResult ProcessData(FormCollection collection ,string customAttr)
{

, если вам нужно передать несколько пользовательских значений, вам нужно выложить строковый массив из запроса ajax и сделать подпись контроллера, например:

public ActionResult ProcessData(FormCollection collection ,string[] customArray)
    {
0 голосов
/ 27 января 2011

Как устроен ваш помощник? Если он расширяет HtmlHelper, вы можете получить доступ к ViewContext.HttpContext.Request.Form, который является NameValueCollection; FormCollection используется механизмом связывания модели для отправки значений обратно в метод действия. Его публично нигде не раскрывается.

НТН.

...