Html.BeginForm css属性,不带操作和控制器



我的控制器中有两个操作,创建和编辑,基本上使用相同的视图,因为添加和编辑记录的功能是相同的。

所以在我看来,我有这个:

@using (Html.BeginForm("Create", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))

我可以使用@using (Html.BeginForm()) { }

但是那样的话,我看不到任何重载方法可以添加到我的css类文件中

如何在不必硬编码的情况下,将相同的BeginForm帮助程序用于创建和编辑操作?

或者,如果我想为我的表单标记设置一个样式,应该采用其他什么方法或最佳实践,该样式将用于两个不同的操作。

我和您做了同样的事情,两个操作都有一个视图。在控制器中,我只传递一个名为Action的ViewBag属性,该属性是根据上下文设置的。在视图中,只需调用@Html.BeginForm(ViewBag.Action,…).

最好的选择是创建一个css文件并将其包含在视图布局中。

<link href="**.css" rel="stylesheet" type="text/css" />

内部css:

form {
background-color: #fff;
margin: 0;
padding: 0;
}

尽管这似乎是一个为两者重用同一视图的好主意,但我可以告诉您,最终您将不得不将它们拆分,通常是由于请求了一些仅适用于其中一个或另一个的新功能。在实践中为"编辑"one_answers"创建"都设置一个专用视图是个好主意。在这和保持它们干燥之间,一个很好的折衷方案是让视图包含开始形式标记,如果需要的话,可能是一些JavaScript或任何其他引用,但对于字段本身,请使用@Html.EditorFor()并为该数据类型创建EditorTemplate。这样,它仍然尽可能地保持DRY原则,但仍然让你坚持单一责任原则。当然,如果它们变得更加复杂,那么共享的EditorTemplate可能也需要更改,在这种情况下,您可能需要在未来将其拆分,并使用类似@Html.EditorFor(x=>x, "CustomerEdit")的东西

通常,让视图的关注点(生成表单URL)由控制器指定是一种糟糕的做法。

视图/客户/Create.cshtml

@using (Html.BeginForm("Create", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.EditorFor(x=>x)
}

视图/客户/编辑.cshtml

@using (Html.BeginForm("Edit", "Customers", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.EditorFor(x=>x)
}

视图/客户/编辑模板/Customer.chtml

<div class="control-group">
<label class="control-label">@Html.DisplayNameFor(model => model.Name)</label>
<div class="controls">
<span class="text">
@Html.EditorFor(model => model.Name)
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">@Html.DisplayNameFor(model => model.PhoneNumber)</label>
<div class="controls">
<span class="text">
@Html.EditorFor(model => model.PhoneNumber)
</span>
</div>
</div>
...etc

相关内容

  • 没有找到相关文章

最新更新