2017-03-31 60 views
0

我不知道如何恰当地说这个问题,但基本上我没有一个ASP.Net应用程序。我发送以下请求到控制器从我的观点:发送高级参数到ASP.Net MVC

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

我写了没有工作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返回null。我如何获得在我的课堂上定义的sortItemsFieldType

由于来自RequestData的参数是sort[Field]=Type

任何帮助在这里将不胜感激!

编辑:

我改变了我的RequestData类这样的:

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]}(一个数据的例子)。

如果这是一个很好的做法,我如何访问FieldType

+0

我试着编辑你的问题,因为其中一个类没有格式化。增加了4个空格,但最小编辑是6! – Neil

+0

对不起,刚刚批准了一个编辑。感谢您指出。 –

回答

0

您可以通过多种不同的方式实现此目的;在每种情况下,您的问题根本不是遵循该数据类型的modelbinder约定。

首先,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