标签: mvc-editor-templates

模型绑定复选框列表问题

在我的EditorTemplates中,我有两个视图.一个为我的类别(称为_Category)

@model com.example.Models._Category
@Html.CheckBox(Model.Name, Model.Selected)
@Html.LabelFor(c => c.Name, Model.Name)
<br />
Run Code Online (Sandbox Code Playgroud)

和一个类别列表(称为_Categories)

@model List<com.example.Models._Category>
@for (int i = 0; i < Model.Count; i++)
{
    @Html.EditorFor(c => Model[i]);
}
Run Code Online (Sandbox Code Playgroud)

在显示这些类别的视图中,我有一个正在使用的类别列表,如下所示:

@Html.EditorFor(m => m.Categories, "_Categories")
Run Code Online (Sandbox Code Playgroud)

当我查看页面时,旁边有多个带有名称的checbox,这很好.复选框的名称不太好,但结果看起来像这样:

....name="Categories.[1].Batman"....">

名称中有一个额外的点需要消失.有想法该怎么解决这个吗?

提前致谢

asp.net-mvc model-binding mvc-editor-templates razor

5
推荐指数
1
解决办法
3292
查看次数

具有动态下拉的MVC 3编辑器模板

如何将下拉列表显示为编辑器模板的一部分?

所以我有一个Users实体和一个Roles实体.角色作为SelectList和User传递给视图,也就是用户.SelectList变为下拉列表,选择了正确的ID,所有内容都归功于此示例.

我正在尝试使用MVC 3为我的实体获得一个一体化的完美捆绑的EditorTemplate,这样我就可以调用EditorForModel,只要我有像Roles这样的外键,就可以通过下拉列表得到很好的字段. ,在这个特殊的例子中.

我的EditorTemlates\User.cshtml(基于ViewData动态生成布局):

<table style="width: 100%;">
@{
    int i = 0;  
    int numOfColumns = 3;

    foreach (var prop in ViewData.ModelMetadata.Properties
        .Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) 
    { 
        if (prop.HideSurroundingHtml) 
        { 
            @Html.Display(prop.PropertyName) 
        }
        else 
        { 
            if (i % numOfColumns == 0)
            {

                @Html.Raw("<tr>");
            }

            <td class="editor-label">
                @Html.Label(prop.PropertyName)
            </td>
            <td class="editor-field">
                @Html.Editor(prop.PropertyName)
                <span class="error">@Html.ValidationMessage(prop.PropertyName,"*")</span>
            </td>

            if (i % numOfColumns == numOfColumns - 1)
            {
                @Html.Raw("</tr>");
            }
            i++;
        }
    }
}
</table>
Run Code Online (Sandbox Code Playgroud)

在视图上,我然后单独绑定SelectList,我想将其作为模板的一部分.

我的型号:

public class SecurityEditModel
{
    [ScaffoldColumn(false)] …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 visual-studio-2010 mvc-editor-templates asp.net-mvc-3

5
推荐指数
1
解决办法
1223
查看次数

MVC3 IEnumerable模型找不到正确的编辑器模板

我有以下型号:

public class Filter
{
    public string Field { get; set; }

    public string Operator { get; set; }

    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下控制器:

public class FilterController
{
    public ActionResult Index()
    {
        IList<Filter> model = new List<Filter>() {
            new Filter(), 
            new Filter()
        };

        return View(model);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下观点:

@model IEnumerable<Filter>
@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)

这应该查找我的EditorTemplate Filter.cshtml,并为列表中的每个元素渲染模板,对吧?

使用Glimpse,我注意到MVC正在寻找IEnumerable`1.cshtml而不是Filter.cshtml

我使用时会发生同样的事情

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

当我这样做:

@Html.EditorFor(model => model, "Filter")
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说它Filter.cshtml期待一个类型的模型,Filter但它收到了一个类型的模型IEnumerable<Filter>

我这样做了吗?我是否需要做任何其他事情才能使用正确的编辑器模板正确渲染模型列表?

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

5
推荐指数
1
解决办法
1270
查看次数

带有HTML5语义标记的MVC4项目HtmlHelper.EditorFor使用HTML5输入类型

我有一个ASP.NET MVC4项目,启用了HTML5语义标记.使用@Html.EditorFor(m => m.MyDateTimeField)输出时输入type="datetime".我希望能够停止EditorFor生成HTML5标记.我怎样才能做到这一点?

这只是Opera目前的一个问题,因为其他浏览器(据我所知)不支持type="datetime".我在该字段上有一个jQuery datepicker所以在Opera中我得到了jQuery datepicker和浏览器datepicker.

我可以使用以下任何
一种方法修复:a.使用js更改输入类型
b.使用Html.TextBoxFor(m => m.MyDateTimeField)
c.使用自定义编辑器模板
d.使用modernizr检测是否支持datetime,如果支持,则不要使用jQuery datapicker

我想要的解决方案是禁用HTML5生成HtmlHelper.EditorFor.我希望HtmlHelper.EditorFor功能与我在项目创建时没有勾选"html5 semandtic markup"复选框时的功能相同.

编辑: 经过一番搜索,我遇到了DataTypeAttribute我可以在我的模型字段上应用的强制它们作为输入type="text"而不是html5匹配.这是一个潜在的解决方案,但它不太理想.当然必须有一个开关来关闭html5 EditorFor(和等效的助手)?

更多信息: 我有两个项目.第一个是用"Html5语义标记"创建的,另一个没有.第一个使用时使用html5输入类型EditorFor,第二个不使用.我需要停止第一个项目的EditorFor行为方式是没有删除EditorFor.某处必须有设置?

asp.net-mvc html5 html-helper mvc-editor-templates asp.net-mvc-4

5
推荐指数
1
解决办法
3859
查看次数

自定义EditorFor或任何XXXXFor

每当我使用@Html.EditorForModel()以下标准模板时,都会在asp.net mvc中显示

默认在Asp.net MVC模板中

<div class="editor-label">
  <label for="[MY-PROPERTY]">MY-PROPERTYNAME</label>
</div>
<div class="editor-field">
  <input id="[MY-PROPERTYID]" name="MY-PROPERTYNAME" type="text" value=""> 
  <span class="field-validation-valid" data-valmsg-for="MY-PROPERTYNAME" data-valmsg-replace="true"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

我想自定义这个HTML的格式!

但要注意!!!!!

  1. 我知道这个功能 - > @Html.EditorForModel("MY-TEMPLATE")
  2. 我知道这个功能 - > @Html.EditorFor(p => p.MY-PROPERTY, "MY-TEMPLATE")
  3. 我知道这个功能 - > Views\{CONTROLLER}\EditorTemplates\{CLASSNAME\TYPE}
  4. 我知道这个功能 - > Views\Shared\EditorTemplates\{CLASSNAME\TYPE}

我的目标是修改整个项目的默认模板!

无需为此完成整个项目!

  • 使用时@Html.EditorForModel(),每个属性都会生成HTML自定义!!

新模板

新模板将是这样的:

<div class="control-group">
    @Html.LabelFor(p => p.PROPERTY, new { @class = "control-label" })
    <div class="controls">
        @Html.EditorFor(p => p.PROPERTY)
        <span class="help-inline"></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc mvc-editor-templates razor display-templates asp.net-mvc-4

5
推荐指数
1
解决办法
2834
查看次数

复杂类型列表的EditorTemplate返回null,而其元素的EditorTemplate工作正常

我有一个视图,用户可以通过选择checkboxex选择任意数量的俱乐部.俱乐部是主要模型的属性,类型为List <ClubModel>.在重构的过程中,我从这开始:

@using (Html.BeginForm())
{
    <fieldset>
        <legend>Voor Select clubs </legend><br />
    <table>
        <tr>
            @for (var i = 0; i < Model.Clubs.Count; i++)
            {
                if (i % 3 == 0)
                {
                    @:</tr><tr> 
                }
                <td>
                    @Html.HiddenFor(model => model.Clubs[i].ClubID)
                    @Html.EditorFor(model => model.Clubs[i].IsAvailable)
                </td> 
                <td>@Html.DisplayFor(model => model.Clubs[i].ClubName)</td>
             }
        </tr>
     </table>
        <input type="submit" value="Submit" />
    </fieldset>
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作:模型将返回一个填充的Clubs属性.

现在我取出 <td>标签并将它们移动到EditorTemplate:

@using (Html.BeginForm())
{
    <fieldset>
        <legend>Select Clubs </legend><br />
           <table>
        <tr>
            @for (var i = 0; i < Model.Clubs.Count; i++)
            {
                if (i % …
Run Code Online (Sandbox Code Playgroud)

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

4
推荐指数
1
解决办法
4144
查看次数

Asp.Net MVC3 Razor - 子项列表未从编辑器发回

我正在尝试在 MVC3 中创建一个多级编辑器。多级我的意思是我希望能够编辑三个层次结构(父对象、父子对象和子子对象集合)的数据。我的模型大致如下:

namespace MvcApplication1.Models
{
    public class Parent
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public Child Child { get; set; }
    }

    public class Child
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public IEnumerable<SubChild> SubChildren { get; set; }    
    }

    public class SubChild
    {
        public int Id { get; set; }
        public string Name { get; set; }
        private DateTime _date = …
Run Code Online (Sandbox Code Playgroud)

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

4
推荐指数
1
解决办法
7863
查看次数

ASP.Net MVC 3多个CheckBoxLists

我正在开发一个ASP.Net MVC 3 Web应用程序,我最近发布了一个关于如何显示复选框列表的问题

ASP.Net MVC 3检索复选框列表值

感谢RubbleFord和Darin Dimitrov的帮助,我得到了这个工作.

这适用于一个复选框列表,但是,我现在需要能够在同一个视图上显示多个复选框列表,即查看附加的图像.

在此输入图像描述

我用来当前显示一个列表的ViewModels如下;

public class ViewModelShiftSubSpecialties
{

    public ListItem specialtyName { get; set; }
    public IEnumerable<ViewModelCheckBox> SubSpecialityList { get; set; }

}

public class ViewModelCheckBox
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我填充了ViewModelShiftSubSpecialties,如下所示:

var subSpecialties = GetSubSpecialtiesForSpecialty(5);

        ViewModelShiftSubSpecialties viewModel = new ViewModelShiftSubSpecialties();

        var checkBoxList = new List<ViewModelCheckBox>();

        viewModel.specialtyName = _listService.GetListItemByID(5); //Medicine Specialty

        foreach (var item in …
Run Code Online (Sandbox Code Playgroud)

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

4
推荐指数
1
解决办法
2753
查看次数

ASP.NET MVC - 将外部模型传递给编辑器模板

我正在为大多数表单使用自定义编辑器模板,但在尝试使用它们呈现自定义对象选择器时,我发现没有简单的方法将有关包含上下文的信息传递给编辑器模板.

具体来说,我的主窗体呈现域对象的编辑,编辑器模板需要呈现一个AJAX选择器,其中包含依赖于域对象ID的对象列表.我正在使用当前additionalViewData参数传递ID ,我认为这很容易出错,因此非常难看.

我的表单包含类似于以下内容的代码:

@Html.EditorFor(model => model.CategoryId, new { id = model.id })
Run Code Online (Sandbox Code Playgroud)

编辑器模板包含如下代码:

@{
var domainObjectId = ViewData["id"] as int?;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用自定义ModelMetadataProvider选择对象选择器编辑器模板,并希望使用类似的技术将有关包含模型的信息传递给编辑器模板,但这似乎不可能.

所以,我的问题是:

  1. 无论如何使用a ModelMetadataProvider将有关包含模型的信息传递给编辑器模板?
  2. 如果没有,除了通过弱类型additionalViewData参数传递每一条附加信息之外,还有更简洁/更容易的方法来实现我正在尝试的东西吗?

提前致谢!

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

4
推荐指数
1
解决办法
7492
查看次数

如何将 HTMLAttributes 传播到自定义 EditorTemplate?

我为这样的货币浮动格式创建了一个编辑器模板。

@using System.Globalization
@{
    var ri = new RegionInfo(System.Threading.Thread.CurrentThread.CurrentUICulture.LCID);
}

<div class="input-group ">
    <div class="input-group-addon">@ri.CurrencySymbol</div>
    @Html.TextBox("", ViewData.ModelMetadata.Model, new { @class = " form-control text-box single-line" })
</div>
Run Code Online (Sandbox Code Playgroud)

显示带有货币符号的引导输入组

在此输入图像描述

它工作正常,但我试图传递一些额外的类,如“text-danger”或“input-group-lg”,但这些参数不会传递到编辑器模板。

@Html.EditorFor(model => model.money, new { htmlAttributes = new { @class = "text-danger input-lg form-group-lg" } })
Run Code Online (Sandbox Code Playgroud)

类“text-danger input-lg form-group-lg”未设置为主 div。

如何将这些类传播到我的编辑器模板?

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

4
推荐指数
1
解决办法
1150
查看次数