2012-12-12 30 views
0

我的控制器中有2個操作,創建和編輯,基本上使用相同的視圖,因爲添加和編輯記錄的功能是相同的。沒有操作和控制器的Html.BeginForm css屬性

因此,在我看來,我有這樣的:

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

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

但這樣一來,我沒有看到任何重載方法在我的CSS類文件添加

如何在創建和編輯操作時使用相同的BeginForm助手,而無需對其進行硬編碼?

或者如果我想爲我的表單標籤設置樣式,應該採用哪些其他方式或最佳做法,這將用於2種不同的操作。

回答

0

我已經完成了與您同樣的事情,只有兩個操作的一個視圖。在控制器中,我只傳遞一個名爲Action的ViewBag屬性,該屬性取決於上下文。在視圖中,只需調用@ Html.BeginForm(ViewBag.Action,...)。

+0

,你也可以檢查Model是否爲null,例如:BeginForm(Model == null?「Create」:「Edit」,...) – lante

0

最好的選擇是創建一個css文件並將其包含在視圖佈局中。

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

內CSS:

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

多達這似乎是一個好主意,再利用兩個相同的看法,我可以告訴你,最終你將不得不將其分離,通常作爲請求的一些新功能的結果僅適用於其中一項。進入編輯和創建專用視圖的做法是一個好主意。在DRY和DRY之間做一個很好的折衷就是讓視圖包含begin表單標籤,如果需要的話可以包含一些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 
相關問題