2012-08-14 39 views
1

我有以下情況。鏈接編輯器模板到文本框

我正在開發一個MVC 3 asp.net應用程序。我想用日期時間範圍過濾器製作一個搜索表單。我想使用日期選擇器,以便用戶可以選擇日期範圍。 我跟了這MVC教程

http://www.asp.net/mvc/tutorials/javascript/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc-part-4

我的問題是,我不能去編輯模板鏈接到非MODEL @editotfor或輸入或@textbox,我心底把一些代碼等你拿我的觀點。

我在我的共享文件夾下面EditorTemplate(文件Date.cshtml)

@model日期時間 使用日期模板 @ Html.TextBox( 「」 的String.Format( 「{0:d}」 ,Model.ToShortDateString()), 新{@class = 「的DateField」,類型= 「日期」})

,如果我在我看來,一切都用這條線的工作

@ Html.EditorFor(M = > m.fecha_Modificacion,「Date」)

但我想使用的日期選擇在非模型值只是一個文本框simpletextbox我 一直想這樣的:

@ Html.TextBox(「fechaInicio」,「」,新{@class =「的DateField」} )

但不工作 我倒是apreciate任何幫助

UPDATE

我必須更詳細 解釋我的問題我有一個

class Foo{ 

    private stirng name; 
    private DateTime dateOfBirthday; 
} 

在Foo視圖中,我在編輯list.cshtml,所以我可以通過dateOfBirthday由from來搜索。 所以我想製作兩個文本框,以便用戶可以選擇日期時間選擇器從anf到日期範圍。 我想使用模板,因此我可以重新使用它。 但list.cshtml視圖已經輸入到@Model富 但兩個文本框沒有示範田

我對模型輸入@EditorFor filds,所以我試圖在使用由工作完美的EditTemplate我從日期範圍文本框

對於我讀我可以創建一個EditorTemplate但是,這並不意味着我到處使用,我可以只使用,我想

非常感謝您

回答

0

由rcdmk提出的解決方案做了工作。 我認爲polutae是一個搜索組合的類是正確的做法。 我認爲,使用ASP.net MVC我們必須使用字符串類型視圖作爲顯示名稱指向。 謝謝你的幫助。

1

從設計persp ective不要做非模型的事情。創建視圖模型,該視圖模型將包含視圖需要顯示的所有內容並將其發送回控制器,以便您可以在一個類中獲得所需的所有內容。這種強類型類非常容易處理。

至於你的具體問題,以便您可以使用編輯器模板,所有你需要做的是在下面的層次結構創建文件夾EditorTemplatesViews/<ControllerName>/EditorTemplates 並把<TypeYouWantToUseThisEditorTemplate>.cshtml內編輯模板文件夾,並有@model <<TypeYouWantToUseThisEditorTemplate>爲一體該編輯器模板中的第一行。

鏈接到編輯模板是屬性的類型。例如,如果在你的模型有MyType類型的屬性,編輯模板需要調用MyType.cshtml。 這就是你所要做的。

這也適用於原始類型,所以如果您在編輯器模板文件夾下創建文件string.cshtml,那麼您的視圖正在使用的任何字符串將轉到該編輯器模板。

,如果你的編輯器模板將在多個視圖和控制器一起使用,可以/Views/Shared/EditorTemplates下創建你的編輯模板,以便其在應用程序共享。

更多關於編輯模板的位置:ASP.NET MVC 3 – How to use EditorTemplates

希望這有助於。

UPDATE

按照您的要求,這裏是與視圖模型(給你的想法整個建築是如何工作的)

視圖模型用於編輯模板的簡單例子:

public class Book 
{ 
    public int BookId { get; set; } 
    public string BookName { get; set; } 
    public string Description { get; set; } 
} 

EditorTemplate稱爲Book.cshtml和位於/Views/<ControllerName or Shared/EditorTemplates下:

@model <MyAppName>.Models.Book 

@Html.DisplayFor(p => p.BookId) 
@Html.EditorFor(p => p.BookId) 

@Html.DisplayFor(p => p.BookName) 
@Html.EditorFor(p => p.BookName) 

@Html.DisplayFor(p => p.Description) 
@Html.EditorFor(p => p.Description) 

任何錯誤處理,沒有驗證,什麼都沒有是爲了簡潔起見,這個編輯器模板中進行。

正在使用與類型圖書編輯模板必須做根本沒有工作(所有工作將由編輯模板來完成)

查看網頁:

@Html.EditorFor(model => model.Book) 
+0

所以我不明白與共享文件夾中的編輯器模板的差異,爲什麼我不能使用它 – Juan 2012-08-14 22:29:45

+0

然後我怎樣才能將模板鏈接到@ html.xxx – Juan 2012-08-14 22:30:29

+0

你能告訴我一個例子@edittorfor行??? – Juan 2012-08-14 22:43:57

1

您可以使用視圖模型來幫助你

有時候,他們可以節省您的一天,其認爲,當您使用從EF(實體框架),或具有重要性質的其他持久性識別類機型不能由用戶上後改變爲使用這些最佳實踐例。

像這樣的東西可以幫助你:

public class FooSearchViewModel 
{ 
    public Foo Foo { get; set; } 
    public DateTime From { get; set; } 
    public DateTime To { get; set } 
} 

然後,你必須將視圖綁定到這個視圖模型,而不是模型,並用它喜歡:

Name: @Model.Foo.name 
From: @Html.EditorFor(model => model.From, "DateWithCalendar") 
To: @Html.EditorFor(model => model.To, "DateWithCalendar") 

模板可以archieved帶有EditorTemplate,就像他的回答中所解釋的一個@Display Name:

/Views/Shared/EditorTemplates/DateWithCalendar.cshtml

@model System.DateTime 
@Html.TextBoxFor(model => model.Date, new { class = "date datepicker" }) 

然後你可以使用CSS來定製輸入和應用jQuery UI的日期選擇器給它或wethever你喜歡。

您也可以定義模板,DataAnnotations屬性在視圖模型的使用方法:

[UIHint("DateWithCalendar")] 
public DateTime From { get; set; } 

參考文獻:

http://blogs.msdn.com/b/simonince/archive/2010/01/26/view-models-in-asp-net-mvc.aspx
http://kazimanzurrashid.com/posts/asp-dot-net-mvc-viewmodel-usage-and-pick-your-best-pattern
ViewModel Best Practices

+1

這就是我一直從一開始就建議的(查看模型與簡單類型 - 在看到實際視圖模型之前)豎起大拇指。 – 2012-08-14 23:48:12

0

嘗試使用部分觀點:

@* Views\Shared\_HandlingMyString.cshtml *@ 
@model string 
This is my partial view to handle the string: '@Model' 

比你這樣稱呼它從你的主視圖(我覺得這是你要找的鏈接):

@model MyType // that has public string MyProperty that holds your date (start and end) 
@Html.Partial("_HandlingMyString", Model.MyProperty) 

東西沿着這些路線。你可能需要做一些反應,我沒有編譯這個代碼,但它是你所需要的。

請讓我知道這是否有幫助。