将高级参数发送到 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
Field
和 Type
在我的 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; }
}
现在 model
将 sort
保存为 {[Field, Type]}
(数据示例)。
如果这是一个好习惯,我如何访问 Field
和 Type
?
您可以通过多种不同的方式实现这一目标;在每种情况下,您的问题都只是没有遵循该数据类型的模型绑定器约定。
首先,如果你打算 post 回来的话,IEnumerable
已经出局了。它不是可索引类型,因此模型绑定器永远无法绑定到它。但是,改用 List
之类的东西就可以了。然后,您的参数名称只需采用以下格式:ListProperty[N].Property
,其中 N
是索引。因此,对于您的情况,您可以使用 sortItems[0].Field=LastName&sortItems[0].Type=desc
,它可以很好地绑定到您的模型。
要使用字典,您的姓名格式应为 DictionaryProperty[N].Key
和 DictionaryProperty[N].Value
,其中 N
是索引。在您的场景中,它看起来像 sort[0].Key=LastName&sort[0].Value=desc
.
我不知道如何正确表达这个问题,但基本上我有一个 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
Field
和 Type
在我的 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; }
}
现在 model
将 sort
保存为 {[Field, Type]}
(数据示例)。
如果这是一个好习惯,我如何访问 Field
和 Type
?
您可以通过多种不同的方式实现这一目标;在每种情况下,您的问题都只是没有遵循该数据类型的模型绑定器约定。
首先,如果你打算 post 回来的话,IEnumerable
已经出局了。它不是可索引类型,因此模型绑定器永远无法绑定到它。但是,改用 List
之类的东西就可以了。然后,您的参数名称只需采用以下格式:ListProperty[N].Property
,其中 N
是索引。因此,对于您的情况,您可以使用 sortItems[0].Field=LastName&sortItems[0].Type=desc
,它可以很好地绑定到您的模型。
要使用字典,您的姓名格式应为 DictionaryProperty[N].Key
和 DictionaryProperty[N].Value
,其中 N
是索引。在您的场景中,它看起来像 sort[0].Key=LastName&sort[0].Value=desc
.