Asp.net MVC, просмотр с несколькими обновляемыми частями - как? - PullRequest
1 голос
/ 18 апреля 2010

Я начал заниматься программированием на 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); %>    
    <% } %>

1 Ответ

0 голосов
/ 02 сентября 2011

Последняя часть кажется мне грязной. Я бы порекомендовал обернуть их помощниками HTML, чтобы очистить ваш взгляд.

<h2>Manage</h2>
<% Html.RenderDetailsPartial(Model.EditCode) %>
<hr />
<% Html.RenderThoughtsPartial(Model.EditCode) %>

Пусть HTMLHelper определит, какое представление использовать на основе EditCode.

...