Asp.net mvc 3 MVC 3 EditorTemplate-模型属性为空

Asp.net mvc 3 MVC 3 EditorTemplate-模型属性为空,asp.net-mvc-3,Asp.net Mvc 3,我有许多用于各种模型类的自定义EditorTemplates。在这些模板中,我显然需要引用模型的属性。我的问题是,当我使用Model.Id的直接语法(例如)时,该值为null。另一个例子是Model.Name,它返回一个空字符串。但是,当我在表达式(例如@Html.TextBoxFor(I=>I.Name))中引用模型时,值就存在了 为了进一步说明,下面是一段代码片段: @model Vigilaris.Booking.Services.CompanyDTO <div> &l

我有许多用于各种模型类的自定义EditorTemplates。在这些模板中,我显然需要引用模型的属性。我的问题是,当我使用Model.Id的直接语法(例如)时,该值为null。另一个例子是Model.Name,它返回一个空字符串。但是,当我在表达式(例如@Html.TextBoxFor(I=>I.Name))中引用模型时,值就存在了

为了进一步说明,下面是一段代码片段:

@model Vigilaris.Booking.Services.CompanyDTO
<div>
    <fieldset class="editfieldset">
        <legend class="titlelegend">Company Details</legend>
        <ol>
            <li>
               @Html.TextBox("tb1", @Model.Id) 
               @Html.TextBox("tb2", @Model.Name) 
            </li>
            <li>
                @Html.LabelFor(i => i.CreatedDate)
                @Html.DisplayFor(i => i.CreatedDate)
            </li>
            <li>
                @Html.LabelFor(i => i.Name)
                @Html.TextBoxFor(i => i.Name)
            </li>
            <li>
                @Html.LabelFor(i => i.Description)
                @Html.TextAreaFor(i => i.Description)
            </li>
            <li>
                @Html.LabelFor(i => i.Phone)
                @Html.TextBoxFor(i => i.Phone)
            </li>
        </ol>
    </fieldset>
</div>  
@model Vigilaris.Booking.Services.CompanyDTO
公司详情
  • @Html.TextBox(“tb1”,@Model.Id) @Html.TextBox(“tb2”,@Model.Name)
  • @LabelFor(i=>i.CreatedDate) @DisplayFor(i=>i.CreatedDate)
  • @LabelFor(i=>i.Name) @Html.TextBoxFor(i=>i.Name)
  • @LabelFor(i=>i.Description) @Html.TextAreaFor(i=>i.Description)
  • @LabelFor(i=>i.Phone) @Html.TextBoxFor(i=>i.Phone)
  • 在本例中,所有使用LabelFor和DisplayFor helper函数的代码都会显示模型中的数据。但是,Html.TextBox代码部分为Model.Id返回0,为Name返回空字符串


    当我直接引用模型时,为什么它不访问实际的模型数据?

    我无法重现此信息。您可能需要提供更多的上下文(控制器、视图等)。您的文本框也不应该这样命名:

    @Html.TextBox("Id", Model.Id) 
    @Html.TextBox("Name", Model.Name) 
    
    还有,为什么不直接使用强类型版本:

    @Html.TextBoxFor(x => x.Id) 
    @Html.TextBox(x => x.Name) 
    

    我设法弄明白了这一点。我在问题描述中遗漏的一件事是,我正在使用Telerik MVC网格扩展,而EditorTemplate正在用于表单编辑。因此,此时模型属性不可用,这是可以理解的行为。我必须在Telerik MVC网格上使用客户端OneEdit事件,然后根据需要设置这些值

    我记得解决这个问题的方法是,我在Telerik MVC网格中添加了一个客户,如下所示:

    .ClientEvents(events => events.OnEdit("Users_onEdit"))
    
    这告诉网格在触发编辑时运行名为Users\u onEdit的javascript函数。然后,在我的javascript函数中找到我想要的字段,然后设置它的值。以下是代码摘录:

    function Users_onEdit(e) {
        if (e.mode == "insert") {
            $("#UserName").removeAttr("readonly");
            $("#UserName").removeAttr("title");
            $("#divNewUserMessage").show();
    
            var formId = String(e.form.id);
            var formIndex = formId.indexOf("form");
            var companyId = formId.substr(6, formIndex -6);
            var hiddenCompanyId = $(e.form).find("#CompanyId");
            hiddenCompanyId.val(companyId);
        }
    }
    

    我希望这能帮助其他人

    可能不是原因,但你有多余的原因。使用@Html.TextBox(“tb1”,Model.Id)(Model前面没有@)。您能分享一下您的解决方案吗?我发现自己也处在同样的情况下sure@death\u au,我将不得不把它挖出来,但很快就会尝试这样做。嘿@death\u au,我按照要求添加了代码。见上文。希望这有帮助。