MVC3使用beginForm传递参数

时间:2012-04-02 14:48:18

标签: asp.net-mvc-3 parameters

我想使用Html.BeginForm传递rentPeriod参数。 目前,我只将文本放在Details.cshtml中。 如果我想将3,7,14等租借时间作为号码传递,我该怎么办? 我必须使用hiddenfield或函数吗? 我不知道如何将参数传递给我的其他方法,即AddToCart方法。 请告诉我如何传递号码的值。 感谢。

Details.cshtml。

<td>
        Rental Period: <br />
        @using (Html.BeginForm("AddToCart", "ShoppingCart", new { id = Model.productId }, FormMethod.Post))
        { 
            <div class="display-label">
            @Html.RadioButtonFor(model => model.price, Model.threeDayPrice) 
            //I put just text in here '3 day' How can I write this number, '3'?
            //do I have to use hiddenfield? or other functions?
            3 day: £@Model.threeDayPrice
            </div>
            <div class="display-label">
            @Html.RadioButtonFor(model => model.price, Model.aWeekPrice)
            1 week: £@Model.aWeekPrice 
            </div>
            <div class="display-label">
            @Html.RadioButtonFor(model => model.price, @Model.twoWeekPrice)
            2 week: £@Model.twoWeekPrice 
            </div>
            <div class="display-label">
            @Html.RadioButtonFor(model => model.price, @Model.aMonthPrice)
            1 month: £@Model.aMonthPrice 
            </div>
            <div class="display-label">
            @Html.RadioButtonFor(model => model.price, @Model.threeMonthPrice)
            3 month: £@Model.threeMonthPrice 
            </div>
            <div class="display-label">
            @Html.RadioButtonFor(model => model.price, @Model.sixMonthPrice)
            6 month: £@Model.sixMonthPrice 
            </div>
            <br />
            <input type="submit" class="button" value="Add to cart" style="margin-left:0px; width:90px;"/>
        }      
    </td>

AddToCart方法中的ShoppingCart控制器。

//How to pass the parameter here.
[HttpPost]
    public ActionResult AddToCart(int id, FormCollection col)
    {
        var addedProduct = db.Product
            .Single(product => product.productId == id);
        decimal priceValue = Convert.ToDecimal(col["price"]);

        // Retrieve the product from the database
        // Add it to the shopping cart
        var cart = ShoppingCart.GetCart(this.HttpContext);

        cart.AddToCart(addedProduct);

        // Go back to the main store page for more shopping
        return RedirectToAction("Index", new { @priceValue = priceValue });
    }

2 个答案:

答案 0 :(得分:0)

我强烈建议您使用View Models而不是依赖FormsCollection。但是,是的..在您的情况下,您可以使用隐藏字段来存储项目,然后将其从FormsCollection中拉出来。

答案 1 :(得分:0)

下面是一个示例,说明我如何获取与复选框关联的提供程序属性的值,以便在选中复选框时,我可以通过查询formsCollection [“selectedProviderLanID”将其从Controller中的窗体集中取出“。你可以用你的单选按钮做类似的事情。

@foreach (var item in @Model.providerList)
{
<tr>
    <td><input type="checkbox" name="selectedProviderLanID" value="@item.LANID" />   
    </td>
    <td>
       @item.DisplayName
    </td>
    <td>
       @item.Pager
    </td>
</tr>
}