2011-08-07 5 views
1

私は、q_wordが空の文字列を受け取ることになります、私はASP.NET MVCモデルバインディングバグ

public JsonResult Lookup(
    string q_word, string primary_key, 
    int per_page, int page_num) 

q_word掲示値が空の文字列の場合はASP.NET MVCコントローラのパラメータ人口のバグを見つけたと思います。オブジェクトにこれらのパラメータをまとめて(DRY原則)パックすると、動作は異なりますが、空の文字列は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); 
} 

http://localhost:19829/Product/TesterA?q_word=&primary_key=id&per_page=10&page_num=1&another_word= この出力を持っている:

{"q_word":"","primary_key":"id","per_page":10,"page_num":1,"another_word":""} 

http://localhost:19829/Product/TesterB?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_wordとanother_wordですまだヌルです

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

このような動作が期待されますか?意図的に?値がオブジェクトから来たかどうかに違いはありますか?

答えて

0

ASP.NET MVC 2以降の設計上のこの動作をオーバーライドする場合は、[DisplayFormat]属性を使用してプロパティを修飾することができます(ASP.NET MVC 1の場合はそうではありませんでした。following blog postをチェックアウトすることができます) :

public class LookupArg 
{ 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string q_word { get; set; } 

    ... 
} 
+0

よく動作します:-)文字列の根拠を説明する記事にリンクがありますか?文字列がオブジェクトの内部にある場合はnullになります。 – Hao