【发布时间】:2009-08-03 16:44:15
【问题描述】:
我想为值类型(即 int )创建一个 MVC 2 编辑器模板,有人用预览 1 位做过吗?
非常感谢
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-2
我想为值类型(即 int )创建一个 MVC 2 编辑器模板,有人用预览 1 位做过吗?
非常感谢
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-2
当您在回发时提交值时,尼克克拉克的答案是否有效?
在 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")) %>
或者,为所有的 DateTimes 使用 jQuery 的 DatePicker 将 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 中
【讨论】:
我已经写了 a blog post 关于如何通过在 MVC 2 中创建可重用模板来做到这一点。
我的帖子也解释了TemplateInfo和模板的关系。
【讨论】: