我想为值类型(即 int )创建一个 MVC 2 编辑器模板,有没有人用预览 1 位做到这一点?
非常感谢
当您在回发时提交值时,尼克克拉克的答案会起作用吗?
在 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 用于所有 DateTimes,请将对 jQuery 和 jQueryUI 的引用添加到您的 Masterpage 或包含对 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)
-马特
我还没有尝试过预览 1,但他们在这个 channel9 视频中做了你所要求的:
他们同时执行 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
我写了一篇关于如何通过在 MVC 2 中创建可重用模板来做到这一点的博客文章。
TemplateInfo
我的帖子还解释了和模板之间的关系。
我发现布拉德威尔逊的博客有最好的例子和解释。该系列的第 3 部分专门讨论值类型(String、decimal、Int32)。
享受!