我为Number输入创建了一个模板,如果我这样做的话
@Html.EditorFor(model => model.SomeValue, "Number")
Run Code Online (Sandbox Code Playgroud)
它工作正常,使用模板.
但是这不起作用:
@Html.EditorFor(model => model.SomeValue)
Run Code Online (Sandbox Code Playgroud)
为什么我需要为基本类型指定编辑器模板的名称?
我有一个模特:
public class MyListModel
{
public int ID {get;set;}
public List<User> Users{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
如何在foreach中使用Html.EditorFor方法?
@model MyListModel
<table>
<tr>
<th></th>
</tr>
@foreach (var item in Model.Users) {
<tr>
<td>
@Html.EditorFor(item.Enabled)
</td>
</tr>
}
</table>
Run Code Online (Sandbox Code Playgroud) 如何为枚举创建默认编辑器模板?我的意思是:我可以做这样的事情:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Enum>" %>
<% -- any code to read the enum and write a dropdown -->
Run Code Online (Sandbox Code Playgroud)
并将其放在EditorTemplates文件夹下的名称下Enum.ascx?
这是我尝试过的问题的解决方法,但这不是我需要的.
这是我的枚举:
public enum GenderEnum
{
/// <summary>
/// Male
/// </summary>
[Description("Male Person")]
Male,
/// <summary>
/// Female
/// </summary>
[Description("Female Person")]
Female
}
Run Code Online (Sandbox Code Playgroud)
我制作了一个名为的模板GenderEnum.acsx并将其放入Shared/EditorTemplates文件夹中.这是模板:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AlefTech.HumanResource.Core.GenderEnum>" %>
<%@ Import Namespace="AlefTech.HumanResource.WebModule.Classes" %>
<%=Html.DropDownListFor(m => m.GetType().Name, Model.GetType()) %>
Run Code Online (Sandbox Code Playgroud)
当然这个方法是我自己的:
public static class HtmlHelperExtension
{
public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, …Run Code Online (Sandbox Code Playgroud) 我在我的一个对象上有一个属性,它是一个可以为空的布尔值,我希望我的逻辑有真正的表示是,假为是否为零,而为零则为零.现在因为我将在许多不同的对象上拥有这样的多个属性,所以最有意义的是为这些属性创建编辑器和显示模板.我将使用jQuery UI来应用buttonset的可视元素,但这一切都有效,但是现在,这超出了我的问题范围.我的编辑器模板看起来像这样.
@model bool?
<div data-ui="buttonset">
@Html.RadioButtonFor(x => x, true, new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes"}) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label>
@Html.RadioButtonFor(x => x, false, new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label>
@Html.RadioButtonFor(x => x, "null", new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA">N/A</label>
</div>
Run Code Online (Sandbox Code Playgroud)
我的问题是,在任何情况下我都无法使用此编辑器模板来正确显示模型的当前值.因为我没有在此范围内呈现模型的属性而是模型本身,所以MVC3中的内置逻辑将不会正确设置checked属性,因为检查是为了验证名称不为空或为null(请参阅MVC3) source,InputExtensions.cs:第#259行).我无法通过与模型进行比较来动态设置checked属性,因为浏览器会检查有关已检查属性是否存在值的单选按钮,因此即使我的单选按钮看起来如下所示,最后一个按钮仍然是选中的.
<div class="span-4" data-ui="buttonset">
<input checked="checked" id="MyObject_BooleanValueYes" name="MyObject.BooleanValue" type="radio" value="True" /><label for="MyObject_BooleanValueYes">Yes</label>
<input checked="" id="MyObject_BooleanValueNo" name="MyObject.BooleanValue" type="radio" value="False" /><label for="MyObject_BooleanValueNo">No</label>
<input checked="" id="MyObject_BooleanValueNA" name="MyObject.BooleanValue" type="radio" value="null" /><label for="MyObject_BooleanValueNA">N/A</label>
</div><span class="field-validation-valid" data-valmsg-for="MyObject.BooleanValue" …Run Code Online (Sandbox Code Playgroud) 我编写了一个EnumDropDownFor()帮助器,我想与EditorFor()一起使用.我刚刚开始使用EditorFor(),所以对模板的选择方式有点困惑.
我的Enum.cshtml编辑器模板如下:
<div class="editor-label">
@Html.LabelFor(m => m)
</div>
<div class="editor-field">
@Html.EnumDropDownListFor(m => m)
@Html.ValidationMessageFor(m => m)
</div>
Run Code Online (Sandbox Code Playgroud)
如果没有明确定义要使用的模板,是否有任何方法可以使用默认模板,只要将Enum传入EditorFor()?
当我设置ViewBag.Title在Razor模板的顶部时,将Model.Title使用值ViewBag.Title而不是期望值填充编辑器模板文本框Model.Title.Html.EditorFor(x => Model.Title)显式调用不会产生此行为.
如何在ViewBag.Title不维护模型的自定义编辑器模板的情况下阻止编辑器模板显示值?
@{
ViewBag.Title = "Edit Post " + Model.Title;
}
@Html.EditorFor(x => Model.Title) @* renders "My Title" text box *@
@Html.EditorFor(x => Model) @* renders "Edit Post My Title" text box *@
Run Code Online (Sandbox Code Playgroud) 我有一套标准的模板用于我的mvc项目,我希望将其保存为源代码控制(SVN)中的外部文件夹
这意味着我不能将任何项目特定文件放在这个文件夹中,因为它将被提交到错误的地方.. ..我的标准模板需要覆盖MVC本身使用的那些,所以他们需要在MVC的位置期望重写模板(例如〜/ Views/Shared/EditorTemplates)
那我在哪里可以把我的项目特定的?
例如,我应该将它们放在〜/ Views/Shared/SiteEditorTemplates中,并添加搜索路径吗?我该怎么办?还是其他建议?
谢谢你,蚂蚁
我想从我的控制器返回一个EditorTemplate作为Partial View.
我目前在做:
public ActionResult Create([Bind(Prefix="Create")]CreateViewModel model)
{
return PartialView("~/Views/Shared/EditorTemplates/Template.cshtml", model);
}
Run Code Online (Sandbox Code Playgroud)
问题是,在我这样做之后,Create_前缀远离我的观点.有没有办法将编辑器模板作为局部视图返回并保留前缀?
Index.cshtml @model IndexViewModel
@using(Html.BeginForm("Create"))
{
@Html.EditorFor(m => m.Create, "Template")
<input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
我正在通过AJAX调用提交此表单.当我最初调用EditorFor时,所有字段都有一个前缀Create_.但是,在我提交表单并返回此PartialView后,前缀将丢失.
我对当前的DropDownList实现不满意,因为我对选项标签不能做太多(仅支持选中,支持文本和值).我想在我可以设置禁用和其他个人选项的地方.
目前我正在通过javascript改变选项,但我认为这有点像一种hacky方式,我宁愿只是渲染正确的html开始.
我知道我可以创建一个使用select和option标签的模板,并根据需要制作选项 - 但是正常的DropDownList扩展添加了val的东西以及特定的名称和ID,我想在提交表单时是正确的数据绑定:
<select data-val="true" data-val-number="The field SelectedValue must be a number." id="ParentDropDown_SelectedValue" name="ParentDropDown.SelectedValue">
Run Code Online (Sandbox Code Playgroud)
如何将这些属性添加到我自己的模板中?
我需要更改日期格式dd.MM.yyyy.我收到客户端验证错误,因为ASP.NET MVC日期格式与我在服务器上的预期不同.
为了更改ASP.NET MVC日期格式,我试过:
Web.config文件:
<globalization uiCulture="ru-RU" culture="ru-RU" />
Run Code Online (Sandbox Code Playgroud)
模型:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime? ServiceCreatedFrom { get; set; }
Run Code Online (Sandbox Code Playgroud)
编辑模板:
@model DateTime?
@Html.TextBox(string.Empty, (Model.HasValue
? Model.Value.ToString("dd.MM.yyyy")
: string.Empty), new { @class = "date" })
Run Code Online (Sandbox Code Playgroud)
视图:
@Html.EditorFor(m => m.ServiceCreatedFrom, new { @class = "date" })
Run Code Online (Sandbox Code Playgroud)
甚至Global.asax:
public MvcApplication()
{
BeginRequest += (sender, args) =>
{
var culture = new System.Globalization.CultureInfo("ru");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
};
}
Run Code Online (Sandbox Code Playgroud)
没有什么对我有用.
asp.net-mvc mvc-editor-templates razor asp.net-mvc-3 asp.net-mvc-4