Asp.net mvc 3 MVC 3 EditorTemplate-模型属性为空
我有许多用于各种模型类的自定义EditorTemplates。在这些模板中,我显然需要引用模型的属性。我的问题是,当我使用Model.Id的直接语法(例如)时,该值为null。另一个例子是Model.Name,它返回一个空字符串。但是,当我在表达式(例如@Html.TextBoxFor(I=>I.Name))中引用模型时,值就存在了 为了进一步说明,下面是一段代码片段: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
@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,我按照要求添加了代码。见上文。希望这有帮助。