将大量参数传递给控制器​​?

时间:2014-11-13 12:39:34

标签: html asp.net asp.net-mvc-4

我正在创建一个"高级输入表单"有很多用于搜索数据的输入。我的问题是:将大量数据从HTML传递到控制器的最佳方法是什么。

我问的原因是。假设你有这个HTML表单:

 @using (Html.BeginForm("Loading", "AdvancedSearch"))
    {    
       <input type="text" id="keyword">
       <input type="text" id="keyword1">
       <input type="text" id="keyword2">
       <input type="text" id="keyword3">
       <input type="text" id="keyword4">
       <input type="text" id="keyword5">
       <input type="text" id="keyword6">
       <input type="text" id="keyword7">
       <input type="text" id="keyword8">
       <input type="text" id="keyword9">

       <input type="submit" value="Search" style="width: 150px;" /> 
    }

然后将这一切传递给控制器​​将是非常讨厌的(我已经获得了更多关键字):

public ActionResult Loading(string keyword1, string keyword2, string keyword3, string keyword4, string keyword5, string6
                         string keyword7, string keyword8, string keyword9){
//do things to the parameters!
return View();
}

那么你将如何执行此操作或者你会这样做?

谢谢!

3 个答案:

答案 0 :(得分:4)

使用模型类。如果输入名称与模型属性匹配,MVC引擎将为您执行映射。

public class Keywords
{
    public string keyword1 { get; set; }
    public string keyword2 { get; set; }
    ///etc...
}

你的行动更简单:

public ActionResult Loading(Keywords keywords){
    //do things to the parameters!
    var keyword1 = keywords.keyword1;
    return View();
}

答案 1 :(得分:1)

我建议使用视图模型,并为您的关键字添加一个列表。为每个关键字添加属性是没有意义的:

public class Keywords
{
    public List<string> Items { get; set; }
}

public ActionResult Loading(Keywords keywords){ }

或者如果可能的话:

public ActionResult Loading(List<string> keywords){ }

详细了解here

答案 2 :(得分:1)

使用那些关键字1,关键字2等创建一个类...

public class SearchDto
{
    public string Keyword1 { get; set; }
    public string Keyword2 { get; set; }
    public string Keyword3 { get; set; }
    public string Keyword4 { get; set; }
    public string Keyword5 { get; set; }
    public string Keyword6 { get; set; }
    public string Keyword7 { get; set; }
    public string Keyword8 { get; set; }
}

然后是ActionResult,如

public ActionResult Loading(SearchDto dto)
{
return View();
}

您可以在视图中发布数据。

这里有一个例子Send JSON data via POST (ajax) and receive json response from Controller (MVC)

还在这里

function search() {
    $.ajax({
        type: "POST",
        url: '@Url.Action("CreateEmail", "Email")',
        data: JSON.stringify({
            Keyword1 : $("#keyword1").val(),
            Keyword2 : $("#keyword2").val(),
            Keyword3 : $("#keyword3").val(),
            Keyword4 : $("#keyword4").val(),
            Keyword5 : $("#keyword5").val(),
            Keyword6 : $("#keyword6").val(),
            Keyword7 : $("#keyword7").val(),
            Keyword8 : $("#keyword8").val(),
        }),
        contentType: "application/json; charset=utf-8",
        async: false,
        dataType: "json",
        success: function (result){
        alert('done');
         }
)};