Нужна помощь с синтаксисом Razor в представлении индекса корзины (механизм представления Razor) - PullRequest
0 голосов
/ 12 июля 2011

При первом использовании я полюбил его, и он чувствовал себя гораздо менее загроможденным, чем механизм просмотра вебформ <%:%> и т. Д., Но при дальнейшем его использовании я не могу не заметить, что он гиперчувствителен к тому, где его скобки "{"размещены и другие сценарии.Это дает ошибки в точках, где старый движок просмотра не был настолько требователен.

Например, приведенный ниже код выдаст ошибку, поскольку закрывающая скобка помощника формы} находится под тегом </table>.Если я поставлю его выше </tbody>, это сработает!Но мне это там не нужно, потому что ввод кнопки отправки должен быть вложенным, а я не хочу помещать ввод кнопки в таблицу.

@model CartTest.Models.Cart

@{
    ViewBag.Title = "Index";
}

<h2>Cart Index</h2>

<table width="80%" align="center">
  <thead>
    <tr>
      <th align="center">Quantity</th>
      <th align="left">Item</th>
      <th align="right">Price</th>
      <th align="right">Subtotal</th>
    </tr>
  </thead>
  <tbody>
  @{int index = 0;}
  @using (Html.BeginForm("UpdateCart","Cart"))
  {
    foreach (var line in Model.Lines)
    {
      <tr>
        @Html.Hidden("Lines.Index", index)
        <td align="center">@Html.TextBox("Lines[" + index + "].Quantity", line.Quantity)</td>
        <td align="left">@line.Product.Name</td>
        <td align="right">@line.Product.Price</td>
        <td align="right">@(line.Quantity * line.Product.Price)</td>
        <td align="right">@Html.ActionLink("Remove", "RemoveItem", new { productId = line.Product.ProductID }, null)</td>
      </tr>
      index++;
    }
  </tbody>
  <tfoot></tfoot>
</table>

<input type="submit" value="Update Cart" />
}

Ответы [ 2 ]

3 голосов
/ 12 июля 2011

Причина, по которой он работает выше </tbody>, заключается в том, что вы объявили BeginForm внутри открытия <tbody>.Они должны быть правильно вложены, чтобы работать.Если вы не хотите помещать кнопку ввода в таблицу, переместите BeginForm за пределы элемента таблицы, чтобы открывающая и закрывающая скобки находились на одном уровне.

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

    <table width="80%" align="center">

    <thead><tr>
    <th align="center">Quantity</th>
    <th align="left">Item</th>
    <th align="right">Price</th>
    <th align="right">Subtotal</th>
    </tr></thead>

    <tbody>

    @{int index = 0;}

    foreach (var line in Model.Lines)
    {
    <tr>
    @Html.Hidden("Lines.Index", index)
    <td align="center">@Html.TextBox("Lines[" + index + "].Quantity", line.Quantity)</td>
    <td align="left">@line.Product.Name</td>
    <td align="right">@line.Product.Price</td>
    <td align="right">@(line.Quantity * line.Product.Price)</td>
    <td align="right">@Html.ActionLink("Remove", "RemoveItem", new { productId = line.Product.ProductID }, null)</td>

    </tr>
        index++;

} 
    </tbody>
    <tfoot>
    </tfoot>
    </table>

    <input type="submit" value="Update Cart" />
    }
0 голосов
/ 12 июля 2011

Переместить

@{int index = 0;}
@using (Html.BeginForm("UpdateCart","Cart"))
{

часть над таблицей, поэтому вся таблица находится внутри тега формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...