2013-10-19 68 views
0

我有一個字符串屬性的mvc模型,當我收到json參數與客戶端設置爲空字符串我收到null我的mvc控制器操作字符串參數。希望能夠接收空字符串而不是null

我希望能夠得到一個空字符串,而不是零和嘗試以下操作:

[MetadataType(typeof(TestClassMetaData))] 
public partial class TestClass 
{ 
} 

public class TestClassMetaData 
{ 
    private string _note; 

    [StringLength(50, ErrorMessage = "Max 50 characters")] 
    [DataType(DataType.MultilineText)] 
    public object Note 
    { 
     get { return _note; } 
     set { _note = (string)value ?? ""; } 
    } 

} 

使用這生成驗證錯誤。

有人知道爲什麼它不起作用嗎?

而且爲什麼元數據類使用對象的屬性類型?

回答

1

屬性添加:

[Required(AllowEmptyStrings = true)] 

Note屬性定義(這應該真正類型string的)。

1

默認DefaultModelBinder使用默認值ConvertEmptyStringToNull這是true

我想要更改此行爲,您應該使用DisplayFormat屬性並將屬性ConvertEmptyStringToNull設置爲false以獲取字符串屬性。

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

    //... 
} 

我沒有檢查fillowing解決方案,但你可以嘗試並實現自定義的模型綁定在你的項目中的所有字符串屬性。

public class CustomStringBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     bindingContext.ModelMetadata.ConvertEmptyStringToNull = false; 
     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

已經實現自定義字符串粘結劑,你應該在Global.asax.cs中

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     ModelBinders.Binders.Add(typeof(string), new StringBinder()); 
    } 
} 

我希望此代碼註冊。

相關問題