我是否使用一个表格或每个表格行asp.net mvc

时间:2011-11-11 14:04:48

标签: html asp.net-mvc standards

我发现自己这样做了:

<table>
   <tr>
      <th>Code</th>
      <th>Enabled</th>
      <th>Percentage</th>
      <th>Amount</th>
      <th>Start</th>
      <th>End</th>
      <th>Action</th>
   </tr>
   @foreach(var item in Model)
   {
      <tr>
         <td>@Html.ActionLink(item.Code, "Edit", new { id = item.Id })</td>
         <td>@item.Enabled ? "Yes" : "No"</td>
         <td>@item.Percentage</td>
         <td>@item.Amount</td>
         <td>@item.StartDate</td>
         <td>@item.EndDate</td>
         <td>
            @using (Html.BeginForm("Delete", "Discounts", new { id = item.Id }))
            {
               <input type="submit" value="Delete" />
            }
         </td>
      </tr>
   }
</table>

我停下来的原因是因为我在每一行都有一个表格,作为一个好习惯,将整个表格包裹在一个表格中会更好吗?

我可能已经知道了答案,但我想我会检查: - )

3 个答案:

答案 0 :(得分:6)

我想说这取决于你的具体情况。

  • 如果您需要最小化页面大小,可以使用一个表单。但是,在提交表单之前,您需要使用javascript更新某些(隐藏)字段。
  • 另一方面,即使用户已关闭javascript,您当前的方法仍可正常工作

根据我目前对你情况的了解,我可能会选择你现在所拥有的,只因为它很干净。

答案 1 :(得分:2)

我认为你的方法很好,而且往往是最好的方法。例如如果您正在编写一个带有像stackoverflow这样的投票系统的应用程序(选择的例子,因为您现在正在查看这样的应用程序)并且您希望使用HttpPost来实现投票机制,那么您可以创建一个小控件上下按钮作为单独的形式*。这样,您可以轻松地向页面添加任意数量的此类“小部件”,并且包含页面不需要知道任何有关它们的信息(包括它们是否存在)。实际上,你可以使用不引人注目的javascript来提交表单并重新加载投票“小部件”并使用故障恢复来重新加载页面如果关闭javascript并且它看起来都很漂亮。

*注意:我不认为他们是如何在stackoverflow上做的,请注意!

非AJAX故障回复可能是这样的:

[HttpPost]
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public ActionResult DoThing(whatever params you are passing in)
{
  // Do stuff and then...
  if (Request.IsAjaxRequest)
  {
      return View("_partialThingView", thingViewModel);
  }
  else
  {
      RedirectToAction("Index");
  }
}

答案 2 :(得分:0)

我认为这是最好的方法,除非要实现批量删除功能(您的HTML代码告诉我情况并非如此)。

通过为每个项目使用表单(使用POST方法),确保

  • 您一次只删除一个项目
  • 您不会通过将此类网址称为http://[yoursite]/[yourapp]/[delete_method]/[item_id_to_delete]而意外删除项目。

所以,按照你目前的方法。 (我的0.02欧元)