2013-02-28 1 views
2

Я пытаюсь получить доступ к ассоциативному массиву в C#. Массив отправляется за сообщение в мое веб-приложение C# mvc.formcollection Как получить доступ к html-форме ассоциативный массив

e. г. html form

<Input Name="myArray[hashKey1]" value="123"> 
<Input Name="myArray[hashKey2]" value="456"> 

и в C# мне нужны ключи и значения - возможно, словарь данных ?!

[HttpPost] 
    public ActionResult Index(FormCollection collection) 
    { 
    Dictionary<string, string> = KEY, VALUE 

    ... 
    } 

я надеюсь, что вы можете следовать за мной: -/

ответ

0

Да, вы можете; но вам нужно указать метод POST.

Это не работает:

<form id="frmThing" action="@Url.Action("Gah", "Home")"> 
    <input id="input_a" name="myArray[hashKey1]" value="123" /> 
    <input id="input_b" name="myArray[hashKey2]" value="456" /> 

    <input type="submit" value="Submit!"/> 
</form> 

Это делает:

<form id="frmThing" action="@Url.Action("Gah", "Home")" method="POST"> 
    <input id="input_a" name="myArray[hashKey1]" value="123" /> 
    <input id="input_b" name="myArray[hashKey2]" value="456" /> 

    <input type="submit" value="Submit!"/> 
</form> 

Edit: Для того, чтобы на самом деле получить доступ к деталям в C#, в вашем примере вы могли бы сделать одно из следующих действий:

String first = collection[0]; 
String secnd = collection[1]; 

или

String first = collection["myArray[hashKey1]"]; 
String secnd = collection["myArray[hashKey2]"]; 

или даже:

foreach (var item in collection) { 
    string test = (string)item; 
} 

Редактировать два:

Вот трюк вы можете использовать, чтобы получить поведение, которое вы хотите видеть. Во-первых, определить метод расширения:

public static class ExtensionMethods 
{ 
    public static IEnumerable<KeyValuePair<string, string>> Each(this FormCollection collection) 
    { 
     foreach (string key in collection.AllKeys) 
     { 
      yield return new KeyValuePair<string, string>(key, collection[key]); 
     } 
    } 
} 

Затем в результате действия вы можете сделать это:

public ActionResult Gah(FormCollection vals) 
{ 
    foreach (var pair in vals.Each()) 
    { 
     string key = pair.Key; 
     string val = pair.Value; 
    } 

    return View("Index"); 
} 
+1

жаль, что проблема не пост. Я не знаю, как получить доступ к данным в C#! – Dominik

+0

Хорошо, я обновил свой ответ, чтобы показать, как это сделать. –

+1

спасибо. извините, но я не знаю hashKey1, hasKey2, hashKeyN, но мне тоже нужен ключ ... – Dominik

Смежные вопросы