没有动作和控制器的Html.BeginForm css属性

时间:2012-12-12 05:56:41

标签: c# css asp.net-mvc html-helper

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

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

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

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

但是这样,我没有在我的css类文件中看到任何重载方法

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

如果我想将样式设置为我的表单标记,则可以使用其他方式或最佳实践,该标记将用于2种不同的操作。

3 个答案:

答案 0 :(得分:0)

我做了和你一样的事情,对这两个动作都有一个看法。在控制器中,我只传递一个名为Action的ViewBag属性,该属性依赖于上下文。在视图中,只需调用@ Html.BeginForm(ViewBag.Action,...)。

答案 1 :(得分:0)

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

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

在css中:

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

答案 2 :(得分:0)

尽管这对于两者都重复使用相同的视图似乎是一个好主意我可以告诉你,最终你将不得不拆分它们,通常是因为要求的一些新功能仅适用于一个或另一个。进入编辑和创建专用视图的做法是个好主意。这个和保持DRY之间的良好折衷是让视图包含begin form标签,如果需要可能包含一些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