0

我将一个序列化字符串发布到 C# 中的 MVC 操作,其中一个空参数(即 &test=&another=10)映射到值 0.0。请问有什么建议吗?我需要将值评估为 null 而不是 0.0。下面的代码段。非常感谢!

更新:该值可以是 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

我认为这里有两个不错的选择。您可以尝试使用自定义模型绑定器(更难),或者您可以只检查 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 回答