我想为值类型创建一个MVC 2编辑器模板,即int,是否有人使用预览1位完成此操作?
非常感谢
答案 0 :(得分:15)
当您在回发时提交值时,Nick Clarke的回答是否有效?
在MVC2预览2中,调用Html.Textbox(“abc”,Model.ToString()) 将呈现一个文本框,并在名称后附加“.abc”,例如
<input id="StartDate_abc" name="StartDate.abc" type="text" value="02 Feb 09" />
在回发并尝试UpdateModel()时会导致问题。
我为DateTime做了一个编辑器模板,以下内容适用于我:
/Views/Shared/EditorTemplates/DateTime.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>
<%= Html.TextBox(String.Empty, Model.ToString("dd MMM yy")) %>
或者,为所有日期时间使用jQuery的DatePicker 将jQuery和jQueryUI的引用添加到您的主页或包含对EditorFor的调用的视图。
/Views/Shared/EditorTemplates/DateTime.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>
<%= Html.TextBox("", Model.ToString("dd MMM yy")) %>
<script type="text/javascript">
$("#<%= ViewData.ModelMetadata.PropertyName %>").datepicker({ dateFormat: 'dd M y' });
</script>
更新:ASP.NET MVC3 ,使用Razor语法:
@model System.DateTime
@Html.TextBox("", Model.ToString("dd MMM yy"))
<script type="text/javascript">
$("#@ViewData.ModelMetadata.PropertyName").datepicker({ dateFormat: 'dd M y' });
</script>
要在视图中使用它,您只需要:
@Html.EditorFor(model => model.DueDate)
-Matt
答案 1 :(得分:4)
我还没有尝试预览1,但是他们在这个频道9视频中做了你要求的事情:
他们同时执行DisplayFor和EditorFor,大约需要2分钟。
- 编辑 -
对于值类型,即int,我能够以相同的方式使它工作。
创建一个模型以传递给我的视图:
public class HomeController : Controller
{
public ActionResult Index()
{
HomeModel model = new HomeModel();
model.message = "Welcome to ASP.NET MVC!";
model.number = 526562262;
model.Date = DateTime.Now;
return View(model);
}
}
public class HomeModel
{
public string message { get; set; }
public int number { get; set; }
public DateTime Date { get; set; }
}
使用新模板逻辑将视图链接到模型:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<HomeModel>" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<p>
<% Html.EditorFor(c => c.message); %>
</p>
<p>
<% Html.EditorFor(c => c.number); %>
</p>
<p>
<% Html.EditorFor(c => c.Date); %>
</p>
然后为每种类型创建一个模板,例如INT32:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
Editor For My Int32: <%= Html.TextBox("abc", Model.ToString())%>
我把它放在Views \ Shared \ EditorTemplates \ Int32.ascx
中答案 2 :(得分:2)
我已经通过在MVC 2中创建可重用模板来编写a blog post有关如何执行此操作。
我的帖子还解释了TemplateInfo
和模板之间的关系。
答案 3 :(得分:1)