在ASP.NET MVC Razor模型中绑定两个表
本文关键字:两个 绑定 NET ASP MVC Razor 模型 | 更新日期: 2023-09-27 18:25:45
在一个类中绑定具有两个表的模型时,我遇到了问题。表单在将值发布到控制器时未将值绑定到模型。
型号:
public class BasicProfileModel {
public BasicProfileModel() {
this.user = new User();
this.basicProfile = new BasicProfile();
}
public User user { get; set; }
public BasicProfile basicProfile { get; set; }
}
User和Basic Profile类是两个具有以下属性的表:
public class User {
public string UserId { get; set; }//not null and PK
public string EmailId { get; set; }//no null
public string Salt { get; set; }//not null
public string Password { get; set; }//not null
public string Role { get; set; }//not null
public bool HasCompleteProfile { get; set; }//not null
}
public class BasicProfile {
public string UserId { get; set; }//not null FK
public string FirstName { get; set; }//not null
public string LastName { get; set; }
public string Gender { get; set; }//not null
public int YearOfBirth { get; set; }//not null
public bool IsApprovedByUser { get; set; }//not null
public bool IsApprovedByAdmin { get; set; }//not null
public bool IsActiveByUser { get; set; }//not null
public bool isActiveByAdmin { get; set; }//not null
}
当我加载视图时,模型显示在控制器(生成视图)或视图c#代码部分顶部初始化的任何值。但当我发布表单时,控制器显示的模型根本没有任何值。当我为单个表创建控制器/视图时,一切都很好。以下是控制器操作方法和视图的代码。
public ActionResult BasicRegister() {
BasicProfileModel model = new BasicProfileModel();
//any value initialised in model here displays in view elements e.g. text boxes.
return View("BasicRegister", model);
}
[HttpPost]
public ActionResult DoBasicRegister(BasicProfileModel basicProfile) {
return View("BasicRegister", basicProfile);
}
//这是视图
@model BasicProfileModel
@using (Html.BeginRouteForm("DoBasicRegister", FormMethod.Post)) {
<div>
@Html.TextBoxFor(m => m.user.EmailId)
</div>
<div>
@Html.TextBoxFor(m => m.user.Password)
</div>
<div>
@Html.TextBoxFor(m => m.basicProfile.FirstName)
</div>
<div>
@Html.TextBoxFor(m => m.basicProfile.LastName)
</div>
<div>
<input type="submit" value="send" />
</div>
}
//路由
routes.MapRoute(
name: "BasicRegister",
url: "join",
defaults: new { controller = "Home", action = "BasicRegister" }
);
routes.MapRoute(
name: "DoBasicRegister",
url: "dojoin",
defaults: new { controller = "Home", action = "DoBasicRegister" }
);
您的模型是null
,因为您的模型有一个名为basicProfile
的属性,而POST方法有一个同名的参数。
将方法中参数的名称更改为(例如)
[HttpPost]
public ActionResult DoBasicRegister(BasicProfileModel model) {
并且该模型将被正确地绑定。
旁注:由于视图只包括数据模型的一些属性,因此正确的方法是使用只包括视图中显示/编辑的属性的视图模型。
路由配置不正确,我相信如果你能正确映射路由,它就会起作用。尝试以下的路线
routes.MapRoute(
name: "BasicRegister",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "BasicRegister", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "DoBasicRegister",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "DoBasicRegister" , id = UrlParameter.Optional}
);