从视图将更新的值传递给控制器

时间:2015-07-28 08:59:03

标签: c# asp.net-mvc razor

我正在开发MVC 4应用程序,我需要将更新后的值从视图传递给控制器​​。

          @foreach (var item in Model)
          {
           <tr>
              <td>@item.ProductId</td>
              <td>@item.Product.ProductName</td>
              <td>@item.Product.UnitPrice</td>
              <td>
                @Html.TextBox("QuantityBox", item.Quantity)
              </td>

             </tr>
            }


           //Update Button

            @using (Html.BeginForm("UpdateCart", "Cart", FormMethod.Post))
            {
                @Html.AntiForgeryToken()
                <input type="submit" id="submit" name="Update" value="Update" />
            }

可以为不同的行输入不同的值。 我需要将这些值从数量文本框传递给控制器​​。

4 个答案:

答案 0 :(得分:1)

尝试使用for循环

@using (Html.BeginForm("UpdateCart", "Cart", FormMethod.Post))
{
    @for(int idx = 0;idx < Model.Length;idx++)
    {
     <tr>
        <td>@Model[idx].ProductId</td>
        <td>@Model[idx].Product.ProductName</td>
        <td>@Model[idx].Product.UnitPrice</td>
        <td>
          @Html.TextBoxFor(_ => Model[idx].Quantity)
        </td>
       </tr>
    }

    @Html.AntiForgeryToken()
    <input type="submit" id="submit" name="Update" value="Update" />
}

当您将上述内容发布回控制器时,MVC模型绑定器将看到Model[0].QuantityModel[1].Quantity等的文本框,并尝试将它们绑定到传入模型。使用foreach循环将导致所有数据都不会传回控制器。

我不知道你在视图中使用了什么@model,但我假设MVC模型绑定器能够解决这个问题。

答案 1 :(得分:0)

Write like this..


@using (Html.BeginForm("UpdateCart", "Cart", FormMethod.Post))
            {
                @Html.AntiForgeryToken()

 @foreach (var item in Model)
          {
           <tr>
              <td>@item.ProductId</td>
              <td>@item.Product.ProductName</td>
              <td>@item.Product.UnitPrice</td>
              <td>`enter code here`
                @Html.TextBox("QuantityBox", item.Quantity)
              </td>

             </tr>
            }
                <input type="submit" id="submit" name="Update" value="Update" />
            }

答案 2 :(得分:0)

我会移动整个Foreach代码块

@foreach (var item in Model)
      {
       <tr>
          <td>@item.ProductId</td>
          <td>@item.Product.ProductName</td>
          <td>@item.Product.UnitPrice</td>
          <td>
            @Html.TextBox("QuantityBox", item.Quantity)
          </td>

         </tr>
        }

进入Using语句:否则您在控制器中返回的模型将不包含用户在视图中提交的更新值。

换句话说:控制器中所需的值必须位于提交按钮所在的“使用”语句中。

答案 3 :(得分:-1)

您的代码应如下所示

@using (Html.BeginForm("UpdateCart", "Cart", FormMethod.Post))
                {
     @for(i=0;i< Model.item.count ;i++)
              {
               <tr>
                  <td>@item.ProductId</td>
                  <td>@item.Product.ProductName</td>
                  <td>@item.Product.UnitPrice</td>
                  <td>
                    @Html.TextBoxFor(m=>m.item[i].Quantity)
                  </td>

                 </tr>
                }


               //Update Button


                    @Html.AntiForgeryToken()
                    <input type="submit" id="submit" name="Update" value="Update" />
                }

然后,您将通过发布在控制器中获取这些值 需要正确使用表单标签让我知道它是否有效 如果您想了解MVC-4中的网址重写,请访问http://grandhah.blogspot.in/