2012-11-09 49 views
1

我正在尋找MVC設計剃鬚刀視圖的最佳實踐。mvc剃刀視圖佈局的最佳實踐

這將是更好的選擇:

的HtmlHelper擴展方法

@Html.TextBox("txtName") 


寫HTML直接

<input type"text" id="txtName" name="txtName" /> 

我發現2個diferent鏈接。 第一個http://blogs.msdn.com/b/aspnetue/archive/2010/09/17/second_2d00_post.aspx請使用HTMLHelper擴展方法。
,第二個http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx10 - 每個你可以

所以我有點共熔

+0

什麼讓你感覺更舒適。只需選擇一種設計,並在整個 – orangegoat

回答

1

即使名稱HtmlHelper應該已經給你一個提示你是否應該使用它。你需要幫忙嗎?如果不是,只需從頭開始寫html。 html的生成方式並不重要:從頭開始或使用html助手。重要的是,它是使用正確的輸入名稱生成的,以便模型綁定器可以將這些輸入綁定到模型。

例如,假設你有以下的模型將被傳遞給視圖和將要收到的POST:

public class SomeModel 
{ 
    public Customer Customer { get; set; } 
} 

public class Customer 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

爲了確保您的輸入將被綁定到模型你需要你的頁面上三個輸入:

<input type="hidden" id="whatever" name="Customer.Id" /> 
<input type="text" id="whatever" name="Customer.FirstName" /> 
<input type="text" id="whatever" name="Customer.LastName" /> 

有了這個HTML標記將保證適當的模型自掃門前雪。但是,您可以通過使用HtmlHelpers,這是一個更容易實現這個標記:

@Html.HiddenFor(m => m.Customer.Id) 
@Html.TextBoxFor(m => m.Customer.FirstName) 
@Html.TextBoxFor(m => m.Customer.LastName) 

這不僅給你每個輸入正確name屬性,但也相應地分配id屬性,這樣你就不必這一切都由你自己完成。


看來,從第二篇文章筆者建議從不使用HtmlHelpers有兩個原因:

  1. 學習目的:我認爲說「Web開發人員必須 舒適的書寫HTML」他意味着開發人員應該知道 正確的模型綁定所需的html標記。
  2. 對黑匣子的恐懼:好像作者害怕使用HtmlHelpers生成不正確的html 標記,或者他只是不知道將會生成什麼html。

我不同意他的這句話:「HtmlHelpers其生存的唯一理由是隱藏HTML」。我寧願說「HtmlHelpers生活的唯一理由是幫助編寫HTML標記」


摘要: HtmlHelpers 幫助你寫正確的HTML標記,這就是爲什麼我建議你使用它。

+0

但是如果我想讓web開發人員爲我修改de佈局會發生什麼?只有剃鬚刀標記,他/她如何能夠在網頁瀏覽器中看到這個問題? – Charly

+0

佈局與表單無關。 HtmlHelpers主要用於爲輸入創建html標記,而不是佈局。您似乎對HtmlHelpers實際實現的內容有點困惑。也許,如果您通過您正在嘗試解決的問題的具體示例修改了您的問題,我將能夠更好地指導您。 – Dmitry

+0

Charly - _但如果我想讓Web開發人員修改我的佈局,會發生什麼情況?_。您的Web開發人員應該瞭解Web開發。你是不是指前端設計師?在這種情況下,讓他們設計一個適當抽象表示層的表單(例如,在爲此表單創建CSS時,_please使用類而不是ID或名稱)。向MVC HtmlHelpers添加類是相當直接的 - http://stackoverflow.com/questions/8465133/actionlink-with-multiple-classes-in-asp-net-mvc3。或者,向他們提供表格並等待他們提出問題或查詢。 –

1

由於您使用Razor,我會充分利用一下,有時間寫HTML提供,並且HtmlHelper擴展允許您在很多地方更快更輕鬆地編寫html。

有時您可能需要使用Html,例如,您可能希望將標籤包含在錨點中,並且無法使用@Html.ActionLink

但是,哪裏可以達到相同的結果與任何方法,我建議你去Razor

+1

中保持一致,我同意。我想補充一點,輸入HTML代碼是絕對的 - 除了直接編輯HTML標記之外,您將無法修改它,並且您需要更改每個實例的標記(或多或少是泰勒所說的) 。另一方面,HtmlHelper可以自定義,並用於在許多地方一致地添加標記http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs。您也可以覆蓋該行爲 - http://forums.asp.net/t/1574560.aspx/1 –

+0

謝謝我選擇使用HtmlHelper – Charly

0

Html助手不是美化代碼片斷,只是節省時間。考慮根據模型屬性類型選擇合適的編輯器,以及 - 什麼也非常重要 - 它們可以幫助進行客戶端驗證,前提是您包含jquery.unobtrusive-ajax.js和jquery.validate.js。
最後不能通過簡單編寫HTML來實現。
從我所說的可以很容易推導出Html幫助者「知道」模型,而普通標記卻不知道。
最後,由您決定要使用什麼,但在做出決定時,更多地瞭解Html幫手是更好的選擇。