【问题标题】:Use Html.HiddenFor while iterating迭代时使用 Html.HiddenFor
【发布时间】:2012-05-13 19:54:04
【问题描述】:

ViewModel 如下所示:

public W { get; set; }
public WC WC { get; set; }
public List<TC> TCs { get; set; }

WC 有一组相关的 TC。它们的关系由包含外键WCId的TC映射。

在视图中,我有一个表单。在表单中,有 WC 的输入字段。然后,有一组 TC 取决于最大为 4 的计数。每个 TC 都有一个相关的 T,因为 TC 有一个外键TCId。我试图确保在发布表单时 TC 具有相关的TIdTId 保存在 W 中的 T 列表中(即 @Model.W.T.ElementAt(someindex).TId)。

如何利用 lambda 表达式使用帮助程序在视图中生成这种关系,以便相关控制器在 httppost 操作中使用它?

这是我现在正在做的事情:

<input type="hidden" value="@(Model.W.T.ElementAt(i).TId)"
 name="TCs[@(i)].TId" 
 id="TCs_@(i)__TId" data-val="true"/>

我想做的是使用@Html.HiddenFor 助手,但似乎无法让它工作,所以我只是使用了上面稍微动态但仍然硬编码的方法。注意:这可行,但是,我希望它更清洁。

【问题讨论】:

    标签: asp.net-mvc-3 html.hiddenfor


    【解决方案1】:

    据我所知,您现在正在做的是唯一的方法。我不知道更简单的 @Htm.HiddenFor(...) 版本的方法。我也一直在处理类似的问题。尽管如此,如果您认为可以重用上述模式,您仍然可以创建自己的显示/编辑器模板或其他更抽象的方式。当然,它们会比你的“丑陋”但直接的方法更冗长和复杂。

    【讨论】:

    • 感谢您的回复。我没有考虑过为此做一个帮手,因为它看起来有点笨拙。我不完全确定如何生成正确的属性值,因此必须专门针对这种情况对这些属性值进行逆向工程。
    • 就 ASP.NET MVC 而言,它可能看起来很老套,但在纯 HTML/HTTP 中却不是。
    • 如果您正在考虑编写帮助程序,请查看 Steve Sanderson 的 HtmlPrefixScopeExtensions。在做与自己类似的事情时,我发现这很有用。 blog.stevensanderson.com/2010/01/28/…
    • @JP - 我对制作助手非常熟悉 :) 我为此写了一个,因为这不是一个糟糕的建议。我想我会把它包括在内供其他人用作答案。
    • @Max - 所以,我做了一个助手......它在下面列出:)
    【解决方案2】:

    我把它做成了一个助手,并决定分享它以防其他人遇到这个问题。

    助手:

        public static MvcHtmlString CustomHiddenFor(
            this HtmlHelper html, object ListValue,
            string ListName, int ListIndex, string ListItem)
        {
            return MvcHtmlString.Create(
                string.Format("<input type=\"hidden\" value=\"{0}\" name=\"{1}[{2}].{3}\" id=\"{1}_{2}__{3}\" data-val=\"true\"/>", 
                    ListValue.ToString(),
                    ListName,
                    ListIndex,
                    ListItem
                    ));
        }
    

    使用(请注意,这是从 i 是迭代器的循环中完成的,任何值都将在第一个位置到期):

    @Html.CustomHiddenFor(Model.W.T.ElementAt(i).TId, "TCs", i, "TId")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多