asp.Netmvc UpdateModelオブジェクトを更新するとnullが表示されます
2387 ワード
aspを使っています.Netmvc 4.0プロジェクトをするときに遭遇するこのような状況
フォームを記入する時、いくつかのフォームが記入していないで、空白を残して、それから直接postでフォームを提出して、actionの中でUpdateModelでmodelを更新して、
その結果、記入されていないフォームフィールドがnullになっていることがわかりました.
プロジェクトでnullがデータベースへの更新をコミットできないと判断したため、コミットできなかった
その後googleで調べて解決策を見つけました
私はここで便利さを分かち合ってからこのような状況に遭遇した友达が便利に解決することができます.
解決策は次のとおりです.
新しいクラス継承DefaultModelBinder
そしてGlobalでasaxのApplication_StartでDefaultModelBinderを置き換える
これで解決できる
この解決策の原文アドレスを添付します
http://stackoverflow.com/questions/559846/asp-net-mvc-updatemodel-empty-property
原文の中の第1個の解答、私は試みて効果がなくて、それから引き続き見て、下の第2個の解答は少し直して今私がこれを出します
うまく解決してみた
フォームを記入する時、いくつかのフォームが記入していないで、空白を残して、それから直接postでフォームを提出して、actionの中でUpdateModelでmodelを更新して、
その結果、記入されていないフォームフィールドがnullになっていることがわかりました.
プロジェクトでnullがデータベースへの更新をコミットできないと判断したため、コミットできなかった
その後googleで調べて解決策を見つけました
私はここで便利さを分かち合ってからこのような状況に遭遇した友达が便利に解決することができます.
解決策は次のとおりです.
新しいクラス継承DefaultModelBinder
using System.ComponentModel;
using System.Web.Mvc;
namespace CustomerWebsite.Mvc
{
public sealed class EmptyStringToNullModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
if (value == null && propertyDescriptor.PropertyType == typeof(string))
{
value = string.Empty;
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}
}
そしてGlobalでasaxのApplication_StartでDefaultModelBinderを置き換える
ModelBinders.Binders.DefaultBinder = new EmptyStringToNullModelBinder();
これで解決できる
この解決策の原文アドレスを添付します
http://stackoverflow.com/questions/559846/asp-net-mvc-updatemodel-empty-property
原文の中の第1個の解答、私は試みて効果がなくて、それから引き続き見て、下の第2個の解答は少し直して今私がこれを出します
うまく解決してみた