0

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

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

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

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

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

如何在创建和编辑操作中使用相同的 BeginForm 帮助器,而无需对其进行硬编码?

或者,如果我想为我的表单标签设置样式,应该采用哪些其他方式或最佳实践,这将用于 2 个不同的操作。

4

3 回答 3

0

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

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

内部CSS:

form {
        background-color: #fff;
        margin: 0;
        padding: 0;
    }
于 2012-12-12T16:04:45.953 回答
0

尽管为两者重用相同的视图似乎是个好主意,但我可以告诉您,最终您将不得不将它们拆分,通常是由于请求的某些新功能仅适用于其中之一。练习为“编辑”和“创建”提供专用视图是一个好主意。在这和保持它们 DRY 之间的一个很好的折衷是让视图包含开始表单标记,如果需要,可能是一些 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)
}

视图/客户/Edit.cshtml

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

视图/客户/EditorTemplates/Customer.cshtml

<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
于 2012-12-12T16:37:39.110 回答
0

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

于 2012-12-12T06:52:50.983 回答