标签: mvc-editor-templates

编辑器模板不适用于DisplayFormat

我正在尝试为DateTime字段创建一个编辑器模板,它似乎不尊重我的DisplayFormat属性.

我的模特:

public class Project
{
    [Display(Name="Project Name")]
    [Required]
    public string ProjectName { get; set; }

    [Display(Name="Start Date")]
    [DisplayFormat(DataFormatString="{0:M/d/yyyy}", ApplyFormatInEditMode=true)]
    public DateTime? StartDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的编辑器模板在/Views/Projects/EditorTemplates/DateTime.cshtml文件夹中

@model DateTime?
@Html.TextBoxFor(m => Model, new { @class="datepicker" })
Run Code Online (Sandbox Code Playgroud)

以下是将所有内容联系在一起的视图:

@model Project

<fieldset>
    <legend>Project</legend>

    <div class="editor-label">
        @Html.LabelFor(m => m.ProjectName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(m => m.ProjectName)
        @Html.ValidationMessageFor(m => m.ProjectName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(m => m.StartDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(m => m.StartDate)
        @Html.ValidationMessageFor(m => m.StartDate)
    </div>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

当我这样的时候,我看到了约会的时间部分.当我删除编辑器模板然后它工作正常,只显示日期部分.当我有一个编辑模板时,为什么它似乎忽略了DisplayFormat?

.net asp.net-mvc mvc-editor-templates asp.net-mvc-3

8
推荐指数
1
解决办法
4385
查看次数

DisplayFormat未应用于十进制值

我有一个模型属性,我正在尝试使用EditorFor模板进行渲染,我正在尝试使用DisplayFormat属性应用格式.然而,它根本不起作用 - 它完全被忽略了.

这是我的模板:

@model System.Decimal?
@Html.TextBoxFor(m => m)
Run Code Online (Sandbox Code Playgroud)

这是我的模型:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0.00}")]
public decimal? Retail { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的观点:

@Html.EditorFor(m => m.Retail)
Run Code Online (Sandbox Code Playgroud)

但它呈现的文本框具有以下值:

189.9900

它似乎非常直接,但它不起作用,我不知道为什么.

更新: 只是为了踢,我尝试使用DisplayFor模板,它工作:

@Html.DisplayFor(m => m.Retail)
Run Code Online (Sandbox Code Playgroud)

那么,当我设置ApplyFormatInEditMode为true 时,为什么DisplayFor模板可以工作,而不是EditorFor模板呢?

更新2: 没关系,工作的原因是因为我的十进制显示模板被硬编码为格式化.所以我的显示模板也不起作用.

asp.net-mvc decimal mvc-editor-templates asp.net-mvc-3 displayformat

8
推荐指数
1
解决办法
2万
查看次数

我是否可以在"区域"编辑器模板中为同一模型调用"共享"编辑器模板?

我有一个编辑器模板位置:

地区/职位/查看/共享/ EditorTemplates/Question.cshtml

我也有一个:

/Views/Shared/EditorTemplates/Question.cshtml

对于两者,模型是相同的.

我想要做的是在该Posts区域的视图中,在该区域中调用我的编辑器模板,设置一些HTML,然后冒泡回到主共享编辑器模板.

这是PostsEditorTemplate:

@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)

但它只是渲染了隐藏字段,而不是共享编辑器模板的内容.

如果我删除了Posts编辑器模板,则会正确呈现共享模板.

我猜MVC/Razor认为这是递归的还是什么?就像我调用相同的模板?

有什么方法我可以告诉它去共享的吗?

本质上,我正在尝试在共享模板中重用HTML,但是注入了一些我自己的偷偷摸摸的HTML.

mvc-editor-templates razor asp.net-mvc-3

8
推荐指数
2
解决办法
5339
查看次数

如何使用具有IEnumerable <T>类型属性的UIHint创建EditorTemplate

在MVC中,您可以为其创建编辑器模板T,然后当您想要为类型属性渲染编辑器时,IEnumerable<T>您可以简单地执行此操作

Html.EditorFor(m => m.MyListOfT)
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,输入框架会自动创建名称,然后在回发模型绑定时,所有工作都很好.

我的问题是:当你有多种类型的编辑器模板时,你如何做到这一点?

我尝试过使用UIHint(),但它似乎只允许您针对列表指定UIHint,而不是列表中的每个项目.这意味着您必须使用foreach()循环为列表创建EditorTemplate,然后您错过了良好的自动命名和模型绑定.

我在这里错过了什么?

该模型是例如

public class MyViewModel
{
    public IEnumerable<SomeType> SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想做的事情如下:

public class MyViewModel
{
    [UIHint("SomeTypeTemplate")]
    public IEnumerable<SomeType> SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并自动应用于列表中的所有元素,以便我可以使用以下内容进行渲染:

Html.EditorFor(m => m.SomeProperty)
Run Code Online (Sandbox Code Playgroud)

mvc-editor-templates razor c#-4.0 asp.net-mvc-4

8
推荐指数
1
解决办法
6631
查看次数

ASP.NET MVC; 使用EditorTemplates编辑集合,这是动态字段创建的最佳方式

我是ASP.NET MVC的新手,如果这比它看起来更容易,那么道歉.我一直在谷歌搜索,我有一个这样的:

public class Search : IAuditable
{
    [Key]
    public int SearchID { get; set; }
    public int UserID { get; set; }

    ...

    public ICollection<SearchTerm> SearchTerms { get; set; }   
}
Run Code Online (Sandbox Code Playgroud)

Create.cshtml中,我有以下内容

<div class="editor-label">
    @Html.LabelFor(model => model.Search.SearchTerms)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Search.SearchTerms, "SearchTerm")
    @Html.ValidationMessageFor(model => model.Search.SearchTerms)
</div>
Run Code Online (Sandbox Code Playgroud)

SearchTerm EditorTemplate是一个简单的表单,如下所示:

@model Core.Search.Parameters.SearchTerm

@Html.HiddenFor(n => n.SearchTermID)
<div class="editor-label">
    @Html.LabelFor(n => n.Text, "Term")
</div>
<div class="editor-field">
    @Html.EditorFor(n => n.Text)
    @Html.ValidationMessageFor(n => n.Text)
</div>
Run Code Online (Sandbox Code Playgroud)

它似乎工作,我在创建时看到一个文本框(默认模型为空时).不过,我想要做的是能够添加/删除SearchTerms与 …

asp.net-mvc mvc-editor-templates

8
推荐指数
2
解决办法
1250
查看次数

人们如何使用编辑器/显示模板与Html助手?

只是想知道人们如何以及何时使用编辑器/显示模板与Html助手.具体来说,我在谈论它用于渲染不同的UI控件而不是渲染实体.

例如,我有类似下面的atm:

<tr>
    <th><%= Html.LabelFor(x => x.ActivityTypeId) %></th>
    <td><%= Html.EditorFor(x => x.ActivityTypeList, "MultiSelectDropDownList")%></td>
</tr>
<tr>
    <th><%= Html.LabelFor(x => x.Name) %></th>
    <td><%= Html.EditorFor(x => x.Name) %></td>
</tr>
<tr>
    <th><%= Html.LabelFor(x => x.Description) %></th>
    <td><%= Html.DisplayFor(x => x.Description, "DisplayString")%></td>
</tr>   
Run Code Online (Sandbox Code Playgroud)

但是最近我想知道我是否应该这样做:

<tr>
    <th><%= Html.LabelFor(x => x.ActivityTypeId) %></th>
    <td><%= Html.MultiSelectDropDownList(x => x.ActivityTypeList)%></td>
</tr>
<tr>
    <th><%= Html.LabelFor(x => x.Name) %></th>
    <td><%= Html.EditorFor(x => x.Name) %></td>
</tr>
<tr>
    <th><%= Html.LabelFor(x => x.Description) %></th>
    <td><%= Html.DisplayString(x => x.Description)%></td>
</tr>   
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用第二个选项是使用中间编辑器的重点...我将使用Html.Textbox,并且能够设置我喜欢的任何html属性.

我对人们在这里使用的模式感兴趣...有什么想法吗?

干杯安东尼

asp.net-mvc mvc-editor-templates

7
推荐指数
1
解决办法
2544
查看次数

在MVC 2编辑器模板中正确注册JavaScript和CSS

如何在ASP.NET MVC 2(RTM)编辑器模板中正确注册javascript块?

我所处的特定场景是我想将Dynarch JSCal2 DateTimePicker用于我的标准日期时间选择器,但这个问题通常适用于任何可重用的javascript包.我的模板现在正常工作,但我的主页中包含了我的JS和CSS,如果我真的需要它,我宁愿只包含这些东西:

<link rel="stylesheet" type="text/css" href="../../Content/JSCal2-1.7/jscal2.css" />
<link rel="stylesheet" type="text/css" href="../../Content/JSCal2-1.7/border-radius.css" />
<script type="text/javascript" src="../../Scripts/JSCal2-1.7/jscal2.js"></script>
<script type="text/javascript" src="../../Scripts/JSCal2-1.7/lang/en.js"></script>
Run Code Online (Sandbox Code Playgroud)

所以很明显我可以把这些行放到我的模板中,但是如果我有一个有5个DateTimePickers的屏幕,那么这个内容将重复5次,这是不理想的.无论如何,我仍然希望我的视图模板触发此代码被放入<head>我的页面.

虽然这与我提出这个问题完全无关,但我想我会在这里(到目前为止)分享我的模板,以防它以任何方式有用:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>

<%= Html.TextBoxFor(model => Model) %>
<input type="button" id="<%= ViewData.TemplateInfo.GetFullHtmlFieldId("cal-trigger") %>" value="..." />

<script type="text/javascript">
    var <%= ViewData.TemplateInfo.GetFullHtmlFieldId("cal") %> = Calendar.setup({
        trigger       : "<%= ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty) %>",
        inputField    : "<%= ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty) %>",
        onSelect      : function() { this.hide(); },
        showTime      : 12,
        selectionType : Calendar.SEL_SINGLE,
        dateFormat    : '%o/%e/%Y %l:%M %P' …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net-mvc mvc-editor-templates asp.net-mvc-2

6
推荐指数
1
解决办法
3579
查看次数

区别:[ScaffoldColumn(false)]和[Display(AutoGenerateField = false)]

要在我的编辑视图中呈现HTML,我使用帮助器@Html.EditorForModel().

我的模特:

[Required(ErrorMessage = "Campo obrigatório")]
[Display(Name = "Nome completo")]
public string Name { get; set; }

[Required(ErrorMessage = "Campo é obrigatório")]
[StringLength(100, ErrorMessage = "A {0} deve ter pelo menos {2} characteres.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Senha")]
public string Password { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirmar senha")]
[Compare("Password", ErrorMessage = "A nova senha e a confirmação da senha não conincidem.")]
public string ConfirmPassword { get; set; }

[Required(ErrorMessage = "Campo obrigatório")]
[Display(Name = …
Run Code Online (Sandbox Code Playgroud)

scaffolding mvc-editor-templates data-annotations razor asp.net-mvc-3

6
推荐指数
1
解决办法
7051
查看次数

如何添加和使用剃刀编辑器模板

我试图找到关于如何将剃刀编辑器模板合并到项目中的文档或示例.另一个线程上的以下答案可能会解决我遇到的问题,但我不知道如何将其纳入我的项目中.毫无疑问这很简单.

这里是我不知道如何合并的解决方案: 输入类型日期的客户端验证不起作用

asp.net-mvc mvc-editor-templates razor

6
推荐指数
2
解决办法
2万
查看次数

使用EditorFor和Twitter Bootstrap来呈现表单标签,输入和验证消息

我已经覆盖了默认的编辑器模板(Object.ascx)以生成表单(正文)HTML,该表格遵循Twitter Bootstrap的指南(http://twitter.github.io/bootstrap/base-css.html#forms)执行通过Html.EditorForModel().

@if (ViewData.TemplateInfo.TemplateDepth > 1) 
{
    @(Model == null ? ViewData.ModelMetadata.NullDisplayText : ViewData.ModelMetadata.SimpleDisplayText)
} 
else 
{
    foreach (var property in ViewData.ModelMetadata.Properties.Where(m => m.ShowForEdit @*&& m.ModelType != typeof (System.Data.EntityState)*@ && !m.IsComplexType && !ViewData.TemplateInfo.Visited(m))) 
    {
        if (property.HideSurroundingHtml)
        {
            @Html.Editor(property.PropertyName)
        } 
        else 
        {
            <div class="control-group @(!ViewData.ModelState.IsValidField(property.PropertyName) ? "error" : ViewData.ModelState.ContainsKey(property.PropertyName) ? "success" : "" )">
                @if (!string.IsNullOrEmpty(Html.Label(property.PropertyName).ToHtmlString())) 
                {
                    @Html.Label(property.GetDisplayName() + (property.IsRequired ? " *" : ""), new { @class = "control-label" })
                }

                <div class="controls">
                    @Html.Editor(property.PropertyName)
                    @Html.ValidationMessage(property.PropertyName, "*", new { …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc mvc-editor-templates twitter-bootstrap

6
推荐指数
1
解决办法
3672
查看次数