将高级参数发送到 ASP.Net MVC

Sending Advanced Parameters to ASP.Net MVC

我不知道如何正确表达这个问题,但基本上我有一个 ASP.Net 应用程序。我从我的角度向控制器发送以下请求:

http://localhost:59112/Contacts/IndexJson?current=1&rowCount=50&sort%5BLastName%5D=desc&searchPhrase=&_=1490960196673

我已经为这个请求数据的结构写了两个 class 并没有 100% 工作,如下所示:

public class RequestData
{
    public int current { get; set; }
    public int rowCount { get; set; }
    public string searchPhrase { get; set; }
    public IEnumerable<SortData> sortItems { get; set; }
}
public class SortData
{
    public string Field { get; set; } // FIeld Name
    public string Type { get; set; } // ASC or DESC
}

然后在我的控制器中我有以下内容:

public JsonResult IndexJson(RequestData model)
{
    /* Irrelevant code */
}

该模型可以正常工作并正确填充除 sortItems returns 空值以外的所有内容。如何获得 sortItems FieldType 在我的 class 中定义?

因为来自 RequestData 的参数是 sort[Field]=Type

编辑

我将 RequestData class 更改为:

public class RequestData
{
    public int current { get; set; }
    public int rowCount { get; set; }
    public Dictionary<string, string> sort { get; set; }
    public string searchPhrase { get; set; }
    public Guid id { get; set; }
}

现在 modelsort 保存为 {[Field, Type]}(数据示例)。

如果这是一个好习惯,我如何访问 FieldType

您可以通过多种不同的方式实现这一目标;在每种情况下,您的问题都只是没有遵循该数据类型的模型绑定器约定。

首先,如果你打算 post 回来的话,IEnumerable 已经出局了。它不是可索引类型,因此模型绑定器永远无法绑定到它。但是,改用 List 之类的东西就可以了。然后,您的参数名称只需采用以下格式:ListProperty[N].Property,其中 N 是索引。因此,对于您的情况,您可以使用 sortItems[0].Field=LastName&sortItems[0].Type=desc,它可以很好地绑定到您的模型。

要使用字典,您的姓名格式应为 DictionaryProperty[N].KeyDictionaryProperty[N].Value,其中 N 是索引。在您的场景中,它看起来像 sort[0].Key=LastName&sort[0].Value=desc.