获取子html名称,关于ASP.NET MVC:如何将Html.TextBoxFor用于子模型-正确获取名称属性...

这篇博客探讨了在ASP.NET MVC中如何使用数据注释进行验证,并通过Html.TextBoxFor确保客户端验证。作者指出,使用Html.TextBoxFor与模型绑定结合可以保持验证功能,而Html.TextBox不支持数据注释的验证。博客建议使用EditorTemplates来实现分层绑定,以提高代码复用性和可维护性。
摘要由CSDN通过智能技术生成

我们有几种形式要求我们的会员提供个人信息。我们有一个用于个人信息的模型,并有一个使用该模型的局部视图。一些模型使用PersonalInfo模型作为子模型。

我希望局部视图能够使用正确的name属性呈现html。为了正确绑定,FirstName输入标签的名称属性应该是" PersonalInfo.FirstName"-而不是" FirstName"。

我想使用Html.TextBoxFor,因为它利用了数据注释和不干扰验证的优势。 Html.TextBox不实现对数据注释的验证。

或者-也许有人可以告诉我为什么Html.TextBox不使用数据注释并创建客户端验证。

public class PersonalInfo {

[Required(ErrorMessage ="First Name is required")]

[StringLength(50, ErrorMessage ="First Name must be less than 50 letters")]

public string FirstName {get; set;}

public string LastName {get; set;}

}

public class MemberModel {

public string ShoeSize {get; set;}

public PersonalInfo PersonalInfo {get; set;}

}

public class VolunteerModel {

public string HairColor {get;set;}

public PersonalInfo PersonalInfo {get; set;}

}

会员查看:

@model Member

using (Html.BeginForm()) {

Member Info

@Html.TextBoxFor(x => x.ShoeSize)

@{Html.RenderPartial("_PersonalInfo", Model.PersonalInfo);}

}

义工检视:

@model Volunteer

using (Html.BeginForm()) {

Volunteer Info

@Html.TextBoxFor(x => x.HairColor)

@{Html.RenderPartial("_PersonalInfo", Model.PersonalInfo);}

}

个人信息的部分视图... _PersonalInfo.cshtml:

@model PersonalInfo

@Html.TextBoxFor(x => x.FirstName)

@Html.TextBoxFor(x => x.LastName)

控制器:

public class MemberController : Controller

{

public ActionResult Index()

{

return View(new MemberModel());

}

[HttpPost]

public ActionResult Index(MemberModel model)

{

// model.PersonalInfo.FirstName should be set from user input at this point.

// It is not set correctly when .

// It will work if .

return View(model);

}

}

通过局部视图呈现的HTML代码:

如果我使用Html.TextBox,则不会获得客户端验证。

@Html.TextBox("PersonEditorModel.FirstName", Model.FirstName)

结果是:

您要使用TextBoxFor(没有局部变量,以便Model可以看到层次结构)或使用编辑器模板

戴夫-我相信我想使用局部函数,因此我不必在使用局部函数的所有形式中重复TextBoxFor(FirstName)和TextBoxFor(LastName)。 也许我不了解你...

你们一半了解我。 要进行分层绑定,您应该使用TextBoxFor(m => m.PersonEditorModel.FirstName或使用编辑器模板lostechies.com/jimmybogard/2011/09/07/

您应该使用EditorTemplates而不是局部视图。

您需要将_PersonalInfo.cshtml移至Views\Shared\EditorTemplates\PersonalInfo.cshtml并更改"志愿者视图":

@model Volunteer

using (Html.BeginForm()) {

Volunteer Info

@Html.TextBoxFor(x => x.HairColor)

@Html.EditorFor(x => x.PersonalInfo) @* << change *@

}

有关更多详细信息,请参阅Dave A提到的博客文章。 Scott Hanselman最近还有一篇文章介绍了EditorTemplates。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值