Как получить тип значений коллекции формы в MVC

У меня есть форма, которая отправляет на контроллер с ajax после сериализации. Я хочу получить значения типа как int или строку в контроллере. Форма имеет тип ввода текста и номер типа ввода? Как я могу получить тип номера типа ввода как INT? Код контроллера, как показано ниже

 string abc = fm[key].GetType().Name;

Это всегда становится "Строка".

Предположим, у вас есть форма, как показано ниже

<form method='Post' action='../Home/Index'>
  <input type="text" name="First"/>
  <input type="number" name="Second"/>
  <input type="submit" value="send"/>
</form>

На стороне контроллера зацикливание ключей и значений и добавление их к параметрам хранимой процедуры. Но у sp также есть параметр типа, такой как string, integer...

Контроллер, как показано ниже

[HttpPost]
public ActionResult Index(FormCollection fm)
{
    foreach (var key in fm.AllKeys)
    {
        using (SqlCommand command = new  SqlCommand("SysDefinitionPopulate", con))
        {
            string abc = fm[key].GetType().Name;
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@key", key);
            command.Parameters.Add("@value", fm[key]);
            command.Parameters.Add("@type", abc);
            command.ExecuteScalar();
        }
    }
}

2 ответа

Решение

FormCollection это специальный словарь, ключи и значения которого являются строками.

Чтобы получить целое число, вы можете создать собственную модель и вместо "FormCollection" использовать эту модель, например:

public class MeaningfulName
{
    public string First { get; set; }
    public int Second { get; set; }
}

В вашем контроллере:

[HttpPost]
public ActionResult Index(MeaningfulName model)
{             
     using (SqlCommand command = new  SqlCommand("SysDefinitionPopulate", con))
     {
         command.CommandType = CommandType.StoredProcedure;
         command.Parameters.Add("@key", model.First);
         command.Parameters.Add("@value", model.Second);
         command.ExecuteScalar();
     }
}

Лучше не использовать FormCollection - используйте связывание моделей!

Например, простая привязка, как это:

[HttpPost]
public ActionResult Index(string First, int Second)
{
    // do your magic
}

Или используя реальный класс модели:

public class TestModel // put in Models folder
{
    public string First { get; set; }
    public int Second { get; set; }
}

[HttpPost]
public ActionResult Index(TestModel myData)
{
    // do your magic
}
Другие вопросы по тегам