我正在开发一个ASP.NET MVC项目。我对CRUD操作中的视图有疑问。
在我看到的大多数示例中,使用了每个CRUD操作的单独视图(例如,添加,编辑,删除)。现在想象一下,如果我的数据库中有100个表,并且每个表都需要通过View进行CRUD操作。最好是为每个表创建这些单独的视图,还是创建一个为我创建这些视图的函数,如下所示?
public ActionResult CreateSubject()
{
return View(Model.toList());
}
public ActionResult EditSubject()
{
return View();
}
public ActionResult DeleteSubject()
{
return View();
}
答案 0 :(得分:2)
我对我的控制器上的每个操作使用单独的操作,并创建一个处理所有字段的简单PartialView,然后使用我的Shared文件夹中的共享视图来加载我的部分视图。
public class CRUDController : Controller {
public ActionResult Create() {
return View(new CreateModel());
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(CreateModel model) {
if(ModelState.IsValid) {
//save to db return view or redirect
}
return View(model);
}
public ActionResult Edit(it id) {
var model = new EditModel();
model = //load and map from db
return View(model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(EditModel model) {
if(ModelState.IsValid) {
//save to db return view or redirect
}
return View(model);
}
}
支持接口:
public interface ICreateModel {
}
public interface IEditModel {
int Id {get;set;}
}
CreateModel.cs:
public class CreateModel : ICreateModel {
public string SomeProp {get;set;}
}
EditModel.cs:
public class EditModel : CreateModel, IEditModel {
public int Id {get;set;}
}
_create.cshtml:
@model CreateModel
@Html.TextBoxFor(x=>x.SomeProp)
Create.cshtml:
@model ICreateModel
@using(Html.BeginForm) {
@Html.Partial("_create")
<input type="submit" value="Submit"/>
}
Edit.cshtml
@model EditModel
@using(Html.BeginForm) {
@Html.Partial("_create")
@Html.HiddenFor(x=>x.Id)
<input type="submit" value="Submit"/>
}
这是我如何处理多个CRUD操作的示例(至少在显示它们的表单方面)。您的创建/编辑视图中显然会有更多内容
通过将Edit.cshtml和Create.cshtml放在Shared文件夹中,当您从具有这些名称的操作返回视图时,默认情况下将使用它。默认情况下,视图引擎会检查文件控制器的相应视图文件夹,然后查看“共享”。每个_create.cshtml部分都应该在相应命名的View文件夹中,它们将被正确传递。