我最近和MVC一起工作,我在嘗試使用ajax向我的控制器發送請求時遇到了一個奇怪的問題。我使用jQuery直接與MVC說出來(1.3.2版本),我試圖發出這樣Ajax請求:JQuery + Asp.Net MVC,傳遞浮點數
$.post("Home/OpenTrade", { price: 1.5 }, function() { }, "json");
我也試過parseFloat("1.5")
,而不是1.5
。
當我嘗試使用
[AcceptVerbs(HttpVerbs.Post)]
public void OpenTrade(float? price)
我的接收價在控制器此值始終爲空。如果我省略了?
控制器根本不被調用(這並不奇怪),我試過使用decimal
以及double
類型。此外,這個函數在我發送整型數據時起作用(如果我發送1
這個控制器被調用,並且float? price
被正確填充)。我錯過了什麼,或者它是一個錯誤?
Ad。我可以以字符串的形式獲得價格,然後手動解析它,但是我不喜歡這個解決方案,因爲它不夠優雅,而且它使用像MVC這樣的框架來完成這個任務。
編輯&答:使用喬爾的建議,我創建了一個模型綁定,我會後,也許有人會使用它:
class DoubleModelBinder : IModelBinder
{
#region IModelBinder Members
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string numStr = bindingContext.ValueProvider[bindingContext.ModelName].AttemptedValue;
double res;
if (!double.TryParse(numStr, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out res))
{
if (bindingContext.ModelType == typeof(double?))
return null;
throw new ArgumentException();
}
if (bindingContext.ModelType == typeof(double?))
return new Nullable<double>(res);
else
return res;
}
#endregion
}
它可以被註冊爲雙和雙?活頁夾,雙重?如果值不能解決,它會將null傳遞給控制器。
Btw。任何想法,爲什麼浮動和雙打不工作(對我來說?)?
編輯2 &解決方案:好吧,這將是有趣的:)。它並沒有爲我工作,因爲請求的字符串發送1.5432
(一個示例值),這是完全沒問題,但... MVC試圖解碼它內部使用我的文化設置,這是期待數字格式爲1 , 5432,所以轉換失敗了。
所以,要記住的事情:如果你生活在陌生的國家,請仔細檢查你的文化設置。
我試圖夾住一個測試應用程序,看看我是否可以重新創建原始問題(cut'n'pasted你的jquery調用和動作簽名),但它對我來說都工作正常。 float參數始終具有該值。 ....奇怪吧 – 2009-08-17 02:47:23
他們爲我工作。使用像Fiddler或HttpWatch這樣的HTTP工具來查看您的AJAX帖子是否正確組建。 – 2009-08-17 02:49:43
這很奇怪......我會仔細研究一下,也許我會發現有什麼不對。 – 2009-08-17 03:01:46