相关疑难解决方法(0)

你如何获得foreach循环的当前迭代的索引?

是否有一些罕见的语言构造我没有遇到过(比如我最近学到的一些,有些是关于Stack Overflow)在C#中得到一个表示foreach循环当前迭代的值?

例如,我目前根据具体情况做这样的事情:

int i = 0;
foreach (Object o in collection)
{
    // ...
    i++;
}
Run Code Online (Sandbox Code Playgroud)

c# foreach

861
推荐指数
22
解决办法
81万
查看次数

EditorFor IEnumerable <T> with TemplateName

假设我有一个简单的模型来解释目的:

public class Category
{
    ...
    public IEnumerable<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图:

@model Category
...
<ul>
    @Html.EditorFor(m => m.Products)
</ul>
Run Code Online (Sandbox Code Playgroud)

EditorTemplate:

@model Product
...
<li>
    @Html.EditorFor(m => m.Name)
</li>
Run Code Online (Sandbox Code Playgroud)

请注意,我不必定义EditorTemplate IEnumerable<Product>,我只能为Product模型创建它,而MVC框架足够聪明,可以使用自己的IEnumerable模板.它遍历我的集合并调用我的EditorTemplate.

输出html将是这样的

...
<li>
    <input id="Products_i_Name" name="Products[i].Name" type="text" value="SomeName">
</li>
Run Code Online (Sandbox Code Playgroud)

毕竟,我可以发布到我的控制器.

但是,当我使用模板名称定义EditorTemplate时,为什么MVC没有做到这一点?

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

在这种情况下,我必须更改属性的类型,IList<Product>自己遍历集合并调用EditorTemplate

@for (int i = 0; i < Model.Products.Count; i++)
{
    @Html.EditorFor(m => m.Products[i], "ProductTemplate")
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一种肮脏的解决方法给我.这样做是否还有其他更清洁的解决方案?

c# asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-4

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

为什么我的DisplayFor没有遍历我的IEnumerable <DateTime>?

在我看来,我有这条线

@(Html.DisplayFor(m => m.DaysOfWeek, "_CourseTableDayOfWeek"))
Run Code Online (Sandbox Code Playgroud)

这里m.DaysOfWeek是一个IEnumerable<DateTime>.

有_CourseTableDayOfWeek.cshtml的内容:

@model DateTime
@{
    ViewBag.Title = "CourseTableDayOfWeek";
}
<th>
    @System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[(int) Model.DayOfWeek]
    <span class="dateString">Model.ToString("G")</span>
</th>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

传递到字典中的模型项的类型为' System.Collections.Generic.List`1[System.DateTime]',但此字典需要类型为' System.DateTime' 的模型项.

如果我参考以下帖子:

/sf/answers/395676711/

DisplayFor应通过的IEnumerable被循环并为每个项目显示模板,不应该吗?

view asp.net-mvc-3

18
推荐指数
1
解决办法
3365
查看次数

MVC4 ViewData.TemplateInfo.HtmlFieldPrefix生成一个额外的点

我正在尝试输入正确的名称,以便我的视图模型上的对象集合可以被绑定.

   @{ViewData.TemplateInfo.HtmlFieldPrefix = listName;}
            @Html.EditorFor(m => m, "DoubleTemplate", new { 
                Name = listName,
                Index = i,
                Switcher = (YearOfProgram >= i +1)
            })
Run Code Online (Sandbox Code Playgroud)

正如您在此处看到的,我将"listName"作为模板的前缀传递.listName ="MyItems"的值

这是我的模板:

@model Web.Models.ListElement

@if (ViewData["Switcher"] != null)
{

    var IsVisible = (bool)ViewData["Switcher"];
    var index = (int)ViewData["Index"];
    var thisName = (string)ViewData["Name"] + "[" + index + "].Value";
    var thisId = (string)ViewData["Name"] + "_" + index + "__Value";
    if (IsVisible)
    {
        @*<input type="text" value="@Model.Value" name="@thisName" id ="@thisId" class="cell@(index + 1)"/>*@
        @Html.TextBoxFor(m => m.Value, new { @class ="cell" …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-4 razor-2

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

MVC One Type,One Page - 两种不同的DisplayFor

我正在构建一个内部网,主页包含在显示大量不同数据位的小部件中.我有一个Home.cs模型,其中包含所需数据的各种IEnumerables属性.我一直在使用View文件夹DisplayFor模板来呈现该数据.我现在遇到一个问题,需要以两种不同的方式显示两个不同的工作人员名单.

我可以使用局部视图来呈现其中一个列表,也可以继承该类并使用不同的模板.继承看起来是必要的更多工作,我想知道是否有人知道MVC设计使用的特定方式或者可能只是任何人的首选解决方案?

c# model-view-controller asp.net-mvc-5

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

自定义EditorTemplate未在MVC4中用于DataType.Date

我正在使用Microsoft说明将MVC3应用程序升级到MVC4 .一切都进行得相当顺利 - 除了我的几个日期模型属性现在渲染方式不同.例如,其中一个属性在viewmodel中定义如下:

[Required(ErrorMessage = "Required")]
[DataType(DataType.Date)]
[RegularExpression(@"([1-9]|0[1-9]|1[012])...",
    ErrorMessage = "Format is mm/dd/yyyy")]
[FormatHint("mm/dd/yyyy")]
[InputSize("small")]
public string Date { get; set; }
Run Code Online (Sandbox Code Playgroud)

在升级到MVC4之前,这将通过调用来呈现,@Html.EditorFor(m => m.Date)这将使用自定义的EditorTemplate - String.cshtml模板(因为它是一个字符串!).我有一些格式化html的自定义数据注释,因此它在客户端使用了字段布局,jQueryUI和twitter Bootstrap.验证是通过jquery验证完成的,不引人注目.无论如何,这是它以前呈现的方式:

日期编辑

现在我正在使用MVC4,String.cshtml不再为此属性调用编辑器模板.它呈现如下(在Chrome中使用HTML5编辑器的东西,我假设):

日期编辑mvc4

input元素看起来几乎相同 - 所有的jQuery验证位都在那里 - 唯一的区别似乎是type属性现在type="date",之前的位置type="text".

我想继续使用String.cshtmlEditorTemplate来获取此数据类型.我想可能有一个数据注释,我可以放在ViewModel属性上为其提供TemplateHint @Html.EditorFor(...).如果不是这样,我想知道我可以编写的自定义EditorTemplate来劫持MVC4的格式(我已经尝试过了DateTime.cshtml- 它也没有被调用).如果不是其中任何一个,那么我愿意接受如何获得我以前的属性渲染的建议.

asp.net-mvc asp.net-mvc-4

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