2

ViewModel 看起来像这样:

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

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

在视图中,我有一个表格。在表单中,有 WC 的输入字段。然后,有一组 TC 取决于最大为 4 的计数。每个 TC 都有一个相关的 T,因为 TC 有一个外键TCId。我正在尝试确保在发布表单时 TC 具有相关的TId. TId保存在 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帮助器,但似乎无法让它工作,所以我只是使用了上面稍微动态但仍然硬编码的方法。注意:这可行,但是,我希望它更清洁。

4

2 回答 2

3

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

于 2012-05-13T20:06:19.953 回答
1

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

帮手:

    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")
于 2012-05-13T21:47:54.823 回答