【问题标题】:How to send a model property value from a view to controller如何将模型属性值从视图发送到控制器
【发布时间】:2013-08-18 19:23:18
【问题描述】:

我有一个与显示购物项目的项目模型相关联的视图。我想添加一个数量文本字段并将 itemID 和数量提交给控制器。我正在使用 AJAX 表单。

AJAX 形式:

@using (Ajax.BeginForm("AddToCart", "PizzaBasket",
new AjaxOptions
{
    InsertionMode = InsertionMode.Replace,
    HttpMethod = "GET",
    OnFailure = "searchFailed",
    LoadingElementId = "ajax-loader",
    UpdateTargetId = "basketSummary",
})) 
{
@Html.HiddenFor(id => id.ItemId, new { @class = "id" })
<input type="hidden" name="id" class="id")/>
<label for="quantity">Quantity</label>
<input type="text" name="quantity" size="5"/>
<input type="submit" value="Add to Cart" />
<img id="ajax-loader" src="@Url.Content("~/Content/Images/ajax-loader.gif")" style="display:none"/> 
}

控制器动作:

 public ActionResult AddToCart(String id, String quantity) {
 /*Add to cart*/
 return RedirectToAction("Index");           
} 

但是,没有提交 id 值。需要了解如何将 id 值从 AJAX 表单传递给控制器​​。请注意,在同一个文件中 @Model.itemId 工作正常。

【问题讨论】:

  • 最确定的问题是您的隐藏 id 标记中有一个“)”,这会使您的 html 标记无效,最终结果与隐藏的标记从未存在一样:)

标签: asp.net-mvc razor


【解决方案1】:

这一行:

@Html.HiddenFor(id => id.ItemId, new { @class = "id" })

需要在您的 Using 语句中。您的提交按钮/输入也是如此。为了使 ajax 表单正确提交,这两个必须在 Using 块内。

【讨论】:

    【解决方案2】:

    您可以按如下方式使用表单集合,

    查看:

    @Html.HiddenFor(m=>m.ProductID)
    

    控制器:

        [HttpPost]
        public void HiddenForExample(FormCollection collection)
        {
            string productid = Convert.ToString(collection["ProductID"]);
        }
    

    【讨论】:

      【解决方案3】:

      这是将id 发布到您的控制器的控件(请注意括号,它应该被删除):

      <input type="hidden" name="id" class="id") />
      

      模型绑定器将使用此控件来填充控制器操作中的String id 参数。由于您正在对其进行硬编码,因此在发布到控制器之前操纵其值的唯一方法是使用 javascript。你确定你正在这样做吗?否则该值将显示为空。

      此外,对于您的 Ajax 选项,您应该将方法设置为 post:

      HttpMethod = "POST"
      

      我看不到您的特定控制器操作所期望的 HTML 操作,但我猜它已被 [HttpPost] 装饰

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-09
        • 2014-03-28
        • 1970-01-01
        • 2019-11-22
        • 2021-11-21
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        相关资源
        最近更新 更多