添加视图和编辑视图通常非常相似,因此写入2个视图是没有根据的.随着应用程序的发展,您将对两者进行相同的更改.
但是,通常存在细微差别.例如,一个字段在添加后可能是只读的,如果该字段是DropDownList,则不再需要ViewData中的List.
那么,我应该创建一个包含两个视图的所有信息的视图数据类,其中,根据您正在执行的操作,某些属性将为null?
我应该将视图数据中的操作作为枚举包含在内吗?
我应该用<%if(ViewData.Model.Op == Ops.Editing){%>包围所有微妙的差异吗?
或者,还有更好的方法?
真的很容易.我们假设您正在编辑博客文章.
这是您对新/编辑的2个操作:
public class BlogController : Controller
{
public ActionResult New()
{
var post = new Post();
return View("Edit", post);
}
public ActionResult Edit(int id)
{
var post = _repository.Get(id);
return View(post);
}
....
}
Run Code Online (Sandbox Code Playgroud)
以下是观点:
<% using(Html.Form("save")) { %>
<%= Html.Hidden("Id") %>
<label for="Title">Title</label>
<%= Html.TextBox("Title") %>
<label for="Body">Body</label>
<%= Html.TextArea("Body") %>
<%= Html.Submit("Submit") %>
<% } %>
Run Code Online (Sandbox Code Playgroud)
这是视图提交的保存操作:
public ActionResult Save(int id, string title, string body)
{
var post = id == 0 ? new Post() : _repository.Get(id);
post.Title = title;
post.Body = body;
_repository.Save(post);
return RedirectToAction("list");
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢视图变得太复杂,到目前为止,我倾向于为编辑和添加使用单独的视图。我使用用户控件来存储公共元素以避免重复。两个视图都将以相同的 ViewData 为中心,并且我的数据上有一个标记来说明该对象是新对象还是现有对象。
这并不比你所规定的更优雅,所以我想知道 Django 或 Rails 的人是否可以提供任何输入。
我喜欢 asp.net mvc,但它仍处于成熟阶段,仍然需要添加更多糖分来消除创建网站的一些障碍。