Asp.net mvc ASP.NET MVC模型绑定错误

Asp.net mvc ASP.NET MVC模型绑定错误,asp.net-mvc,Asp.net Mvc,我想我在ASP.NET MVC控制器的参数填充中发现了一个错误 public JsonResult Lookup( string q_word, string primary_key, int per_page, int page_num) 如果q_字的发布值为空字符串,q_字将接收空字符串。然而,如果将这些参数组合在一个对象中(干式原则),则行为不同,空字符串变为null public class LookupArg { public string q_word {

我想我在ASP.NET MVC控制器的参数填充中发现了一个错误

public JsonResult Lookup(
    string q_word, string primary_key, 
    int per_page, int page_num)
如果q_字的发布值为空字符串,q_字将接收空字符串。然而,如果将这些参数组合在一个对象中(干式原则),则行为不同,空字符串变为null

public class LookupArg
{
    public string q_word { get; set; }

    public string primary_key { get; set; }
    public int per_page { get; set; }
    public int page_num { get; set; }

    public string another_word { get; set; }
}


public JsonResult TesterA(
        string q_word, string another_word, string primary_key, 
        int per_page, int page_num)
{
    return Json(
                new { q_word, primary_key, per_page, page_num, another_word},
                JsonRequestBehavior.AllowGet);
}

public JsonResult TesterB(LookupArg la)
{
    return Json(
                new { la.q_word, la.primary_key, la.per_page, la.page_num, 
                      la.another_word }, 
                JsonRequestBehavior.AllowGet);
}
有以下输出:

{"q_word":"","primary_key":"id","per_page":10,"page_num":1,"another_word":""}
有以下输出:

{"q_word":null,"primary_key":"id","per_page":10,"page_num":1,"another_word":null}
我也试过了,但没用,同样的输出,q_字和另一个_字仍然是空的

public JsonResult TesterB(
   [Bind(Include = "q_word, primary_key, per_page, page_num, another_word")] 
   LookupArg la)

这种行为是意料之中的吗?是故意的吗?如果值来自对象或不来自对象,是否会有任何区别?

如果要覆盖此行为,则可以使用属性装饰属性,该行为是自ASP.NET MVC 2以来设计的(ASP.NET MVC 1中不是这种情况,您可以签出):

好的,这是有效的:-)您是否有任何文章的链接来解释字符串的基本原理,如果它位于对象内部,则应该变为空
public class LookupArg
{
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    public string q_word { get; set; }

    ...
}