6

我想为值类型(即 int )创建一个 MVC 2 编辑器模板,有没有人用预览 1 位做到这一点?

非常感谢

4

4 回答 4

15

当您在回发时提交值时,尼克克拉克的答案会起作用吗?

在 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)

-马特

于 2009-10-10T23:34:08.337 回答
4

我还没有尝试过预览 1,但他们在这个 channel9 视频中做了你所要求的:

http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-ASPNET-MVC-2-Preview-1-with-Phil-Haack-and-Virtual-Scott/

他们同时执行 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

于 2009-08-03T17:27:28.343 回答
2

我写了一篇关于如何通过在 MVC 2 中创建可重用模板来做到这一点的博客文章。

TemplateInfo我的帖子还解释了和模板之间的关系。

于 2010-04-26T15:48:35.580 回答
1

我发现布拉德威尔逊的博客有最好的例子和解释。该系列的第 3 部分专门讨论值类型(String、decimal、Int32)。

享受!

于 2011-10-12T12:28:32.540 回答