0

空のパラメーター (つまり &test=&another=10) が値 0.0 にマップされる C# の MVC アクションにシリアル化された文字列を投稿しています。何か提案はありますか?0.0 ではなく null に評価する値が必要です。以下のコード セグメント。どうもありがとう!

更新:値は 10、100.00、0.0、または null です。

アヤックスポスト

$.ajax({
   type: method,
   url: url,
   data: data,
   dataType: 'json',
   success: settings.success,
   error: settings.error,
   async: !options.sync
});

MVC コントローラー

[AcceptVerbs(HttpVerbs.Post)]
[NoCache]
[JsonContractExceptionFilter]
public ActionResult Save(ViewModel data)
{
    data.Test == 0.0  // should be null

モデル クラス内のプロパティ

public double? Test
{
   get { return obj.test; }
   set { obj.test = value; }
}

更新 2 - obj の内容

public virtual Nullable<double> Test
{
    get;
    set;
}

アップデート 3

public ActionResult Save([ModelBinder(typeof(MyModelBinder))] ViewModel data)
{
   ...
}

カスタムバインダー

public class MyModelBinder : DefaultModelBinder
{  
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
       var request = controllerContext.HttpContext.Request;

       // Default binder
       var temp = base.BindModel(controllerContext, bindingContext);

       // TODO - Find my property and change the value?

       return temp;
    }
}
4

1 に答える 1

0

ここには2つの良い選択肢があると思います. カスタム モデル バインダーの使用を試みることも (より困難)、または Request オブジェクトからクエリ文字列を確認することもできます (より簡単です)。

カスタムモデルバインダー

...または名前と値のコレクションにアクセスするには、次を使用します。

var values = HttpUtility.ParseQueryString(Request.RequestUri.Query);

MSDN の ParseQueryString メソッド

あなたを助けることができるモデルバインダーのサンプル実装は、次のようになります(更新された質問に基づいて):

public class MyModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var request = controllerContext.HttpContext.Request;

        // Default binder
        var temp = base.BindModel(controllerContext, bindingContext);

        var nulledValue = request.QueryString["test"];
        if (nulledValue == "0.0")
        {
            // cast your temp to MyInvoice and set the property here...
        }

        return temp;
    }
}

それが役立つことを願っています!

于 2013-08-22T13:50:06.810 に答える