2012-08-14 35 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) 

东西沿着这些路线。你可能需要做一些反应,我没有编译这个代码,但它是你所需要的。

请让我知道这是否有帮助。