ASP.NET MVC 2编辑器模板的值类型,int

Dea*_*tes 6 asp.net asp.net-mvc asp.net-mvc-2

我想为值类型创建一个MVC 2编辑器模板,即int,是否有人使用预览1位完成此操作?

非常感谢

Mat*_*ear 15

当您在回发时提交值时,Nick Clarke的回答是否有效?

在MVC2预览2中,调用Html.Textbox("abc",Model.ToString())将呈现一个文本框,其名称附加".abc",例如

<input id="StartDate_abc" name="StartDate.abc" type="text" value="02 Feb 09" />
Run Code Online (Sandbox Code Playgroud)

当你回发并尝试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")) %>
Run Code Online (Sandbox Code Playgroud)

或者,为所有DateTimes使用jQuery的DatePicker,将jQuery和jQueryUI的引用添加到您的Masterpage或包含对EditorFor的调用的View中.

/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>
Run Code Online (Sandbox Code Playgroud)

更新: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>
Run Code Online (Sandbox Code Playgroud)

要在View中使用它,您需要的只是:

@Html.EditorFor(model => model.DueDate)
Run Code Online (Sandbox Code Playgroud)

-Matt


Nic*_*rke 4

我还没有尝试过预览 1,但他们做了您在此频道 9 视频中要求的事情:

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; }
}
Run Code Online (Sandbox Code Playgroud)

使用新的模板逻辑将视图链接到模型:

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

然后为每种类型创建一个模板,例如 Int32:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
Editor For My Int32: <%= Html.TextBox("abc", Model.ToString())%>
Run Code Online (Sandbox Code Playgroud)

我把它放在 Views\Shared\EditorTemplates\Int32.ascx 中