Я начал заниматься программированием на asp.net mvc, и мне это нравится каждый день.
В большинстве примеров, которые я видел, используются отдельные виды для просмотра и редактирования деталей конкретной сущности.
например. - таблица музыкальных альбомов со ссылками на отдельные представления «детализация» и «обновление»
[Действие] | Название | Исполнитель
подробно, обновление | Ууу Детка | Барри Уайт
подробно, обновление | Мистер Моджо | Барри Уайт
С помощью mvc, как я могу получить дизайн, в котором R и U (CRUD) представлены в одном представлении, и, кроме того, где пользователь может редактировать отдельные части представления, таким образом, ограничивая объем данных, пользователь может редактировать перед сохранением?
Пример макета - редактирование настроек альбома:
Я достиг такого дизайна с помощью вызовов ajax, но мне интересно, как это сделать без ajax.
Части моего собственного взгляда на это можно увидеть ниже. Я использую флаг (enum EditCode)
указание, какая часть представления, если таковая имеется, должна отображать форму. Соответствует ли такой дизайн каркасу, можно ли сделать его более элегантно?
AlbumController
public class AlbumController : Controller
{
public ActionResult Index()
{
var albumDetails = from ManageVM in state.AlbumState.ToList()
select ManageVM.Value.Detail;
return View(albumDetails);
}
public ActionResult Manage(int albumId, EditCode editCode)
{
(state.AlbumState[albumId] as ManageVM).EditCode = (EditCode)editCode;
ViewData["albumId"] = albumId;
return View(state.AlbumState[albumId]);
}
[HttpGet]
public ActionResult Edit(int albumId, EditCode editCode)
{
return RedirectToAction("Manage", new { albumId = albumId, editCode = editCode });
}
// edit album details
[HttpPost]
public ActionResult EditDetail(int albumId, Detail details)
{
(state.AlbumState[albumId] as ManageVM).Detail = details;
return RedirectToAction("Manage", new { albumId = albumId, editCode = EditCode.NoEdit });// zero being standard
}
// edit album thought
[HttpPost]
public ActionResult EditThoughts(int albumId, List<Thought> thoughts)
{
(state.AlbumState[albumId] as ManageVM).Thoughts = thoughts;
return RedirectToAction("Manage", new { albumId = albumId, editCode = EditCode.NoEdit });// zero being standard
}
Флаг - EditCode
public enum EditCode
{
NoEdit,
Details,
Genres,
Thoughts
}
Вид на манги
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Controllers.ManageVM>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Manage
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Manage</h2>
<% if(Model.EditCode == MvcApplication1.Controllers.EditCode.Details)
{%>
<% Html.RenderPartial("_EditDetails", Model.Detail); %>
<% }else{%>
<% Html.RenderPartial("_ShowDetails", Model.Detail); %>
<% } %>
<hr />
<% if(Model.EditCode == MvcApplication1.Controllers.EditCode.Thoughts)
{%>
<% Html.RenderPartial("_EditThoughts", Model.Thoughts); %>
<% }else{%>
<% Html.RenderPartial("_ShowThoughts", Model.Thoughts); %>
<% } %>