如何将十进制值传递给Action方法

时间:2013-12-27 10:45:29

标签: asp.net-mvc asp.net-mvc-4

我有以下Action方法

public ViewResult Index()
public ActionResult Edit(decimal id)

当用户点击“编辑”链接时,我想调用Edit操作。以下是示例代码段

<td>
    @Html.ActionLink("Edit", "Edit", new { id=item.ItemID }) |
    @Html.ActionLink("Details", "Details", new { id=item.ItemID }) |
    @Html.ActionLink("Delete", "Delete", new { id= item.ItemID})
</td>

重定向到的网址是http://MyServer/Orders/Details/0.020

使用此URL,我的操作方法不会调用。如果我手动编辑URL以删除“。”然后我的方法接到电话。

我的问题是传递小数值以调用Action方法的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

最好的方法是使用查询字符串传递它:

http://MyServer/Orders/Details?id=0.20

您是如何定义路线的?从路由中删除id,ActionLink将其添加为查询字符串。

答案 1 :(得分:2)

尝试自定义Decimal Model Binder,Phil Haack的一篇精彩文章

abastract -

public class DecimalModelBinder : IModelBinder {
    public object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {
        ValueProviderResult valueResult = bindingContext.ValueProvider
            .GetValue(bindingContext.ModelName);
        ModelState modelState = new ModelState { Value = valueResult };
        object actualValue = null;
        try {
            actualValue = Convert.ToDecimal(valueResult.AttemptedValue, 
                CultureInfo.CurrentCulture);
        }
        catch (FormatException e) {
            modelState.Errors.Add(e);
        }

        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
    }
}

答案 2 :(得分:0)

在system.webServer / handlers元素中将以下行添加到站点的web.config

<add name="ApiURIs-ISAPI-Integrated-4.0"
     path="*"
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />

答案 3 :(得分:0)

您可以在View中输入文字。我已经将它用于任何类型,并且效果出色。

id=(decimal) item.ItemID