用于CRUD操作的ASP.NET MVC单视图

时间:2014-01-16 16:57:18

标签: asp.net-mvc razor view

我正在开发一个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();
}

1 个答案:

答案 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文件夹中,它们将被正确传递。