0

当智能感知弹出时,我正在使用以下模型为我的一个视图构建一个 Html 助手,我不知道你能做到。基本上我的模型如下

public class Mainclass
{
    public List<main> mainset { get; set; }
 // do sth to load and save model info
}
 public class main
{
    public personalinfo info { get; set; }
    public addressinfo currentaddr { get; set; }
    public addressinfo[] otheraddr { get; set; }
    public telephone currenttel { get; set; }
    public telephone[] othertel { get; set; }
 }
public class personalinfo
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Ni { get; set; }
    public string dob { get; set; }
    public employer currentemployer { get; set; } //another class employer
    public employer[] otheremployer { get; set; } //an array of employer class
}

智能感知弹出的是(模型=> m.info.Name)。

   @if ( Model.mainset != null){
        foreach ( var m in Model.subset )
        {
            <div class="editor-label">
            @Html.LabelFor(model => m.info.Name)
            </div>
            <div class="editor-field">
            @Html.EditorFor(model => m.info.Name)
            @Html.ValidationMessageFor(model => m.info.Name)
            <div class="editor-label">
        }

所以我想知道这个语句是如何工作的?是否可以让我直接在主模型中设置子字段而无需助手或 ajax 或 json?

4

3 回答 3

2

它是一个 lambda,它并不像看起来那么神奇(无论如何,从高层次来看)。

从源代码中学到的最好的东西:Lambda 表达式 - MSDN C# 编程指南

基本上,在 MVC 中,您使用 lambda 的方法会在您发布表单时将该属性绑定到您的模型中。

于 2013-06-28T14:32:38.637 回答
1

Lambda 只是一个运算符。重点是ValidationMessageFor()orEditorFor()函数。他们期望一个Func<T>参数是一个委托。使用 lambda,您可以传递参数,这是来自委托签名的模型,在 lambda 运算符之后,您将编写方法的实现。因此,如果您扩展您的模型,您将在智能感知中看到新成员。

注意:委托必须在使用前进行实例化,但 MVC 框架会在您创建强类型视图时动态处理它。 ASP.NET MVC 的 HtmlHelper 实例化的位置

于 2013-06-28T14:41:43.337 回答
1

为了澄清,你不是在问一般的 lambda,而是在UNUSED这里?

foreach (var item in Model.Items)
{
    @Html.DisplayFor(UNUSED => item.Foo)
}

它有效,因为您确实传递了item.Foo. MVC 帮助器不能再将它绑定到模型的属性,因此您可以使用此表示法进行显示,但不能直接用于编辑控件。

于 2013-06-28T14:51:17.200 回答