Ricerca…


introduzione

Quando si tratta di oggetti in un'app MVC, se qualsiasi oggetto deve essere mostrato in più punti con lo stesso formato, è necessario un qualche tipo di layout standardizzato. ASP.NET MVC ha reso semplice questo tipo di standardizzazione con l'inclusione di modelli di visualizzazione e di editor. In breve, i modelli di visualizzazione e di editor sono utilizzati per standardizzare il layout mostrato all'utente durante la modifica o la visualizzazione di determinati tipi o classi.

Visualizza modello

Modello:

 public class User  
 {
    public int ID { get; set; }
    public string FirstName { get; set; }
    public DateTime DateOfBirth { get; set; }
 }

Se vogliamo mostrare gli utenti in diverse viste, sarebbe meglio creare un layout standard per questi utenti, ovunque essi debbano essere visualizzati. Possiamo farlo usando i modelli di visualizzazione.

Un modello di visualizzazione è semplicemente una vista parziale legata al modello dell'oggetto che desidera visualizzare ed esiste nella cartella Views/Shared/DisplayTemplates (sebbene sia possibile inserirla anche in Views/ControllerName/DisplayTemplates ). Inoltre, il nome della vista (di default) dovrebbe essere il nome dell'oggetto per il quale si desidera utilizzarlo come modello .

Vista / comune / DisplayTemplates / User.cshtml

 @model TemplatesDemo.Models.User
    
<div style="padding-bottom: 10px">
    <p><strong>ID:</strong> @Html.DisplayFor(m => m.ID)</p>
    <p><strong>Name:</strong> @Html.DisplayFor(m => m.FirstName)</p>
    <p><strong>Date of Birth:</strong> @Html.DisplayFor(m => m.DateOfBirth)</p>
</div>
<hr/>

Ora, se vogliamo mostrare tutti gli utenti dal database e mostrarli in diverse viste, possiamo semplicemente inviare l'elenco degli utenti alla vista e utilizzare il modello di visualizzazione per mostrarli. Possiamo usare uno dei due metodi per farlo:

Html.DisplayFor()
Html.DisplayForModel()

DisplayFor chiamare il modello di visualizzazione per il tipo di proprietà selezionata (ad es. Html.DisplayFor(x => x.PropertyName) . DisplayForModel chiama il modello di visualizzazione per @model della vista

vista

@model IEnumerable<TemplatesDemo.Models.User>
@{
    ViewBag.Title = "Users";
}

<h2>Users</h2>

@Html.DisplayForModel()

Modello di editor

I modelli di visualizzazione possono essere utilizzati per standardizzare il layout di un oggetto, quindi vediamo ora come possiamo fare la stessa cosa per questi oggetti durante la modifica. Proprio come i modelli di visualizzazione, ci sono due modi per chiamare i modelli di editor per un determinato tipo:

Html.EditorFor()
Html.EditorForModel()

I modelli di editor, in modo simile ai modelli di visualizzazione, devono esistere in Views / Shared / EditorTemplates o Views / ControllerName / EditorTemplates . Per questa demo, li creeremo nella cartella condivisa. Ancora una volta, il nome della vista (di default) dovrebbe essere il nome dell'oggetto per il quale si desidera utilizzarlo come modello.

Modello

public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime DateOfBirth { get; set; }
        public Roles Roles { get; set; }
        public int RoleId { get; set; }
    }

 public class Roles
    {
        public int Id { get; set; }
        public string Role { get; set; }
    }

Diciamo che vogliamo essere in grado di modificare qualsiasi utente dal database in più viste. Useremo un ViewModel per questo scopo.

ViewModel

public class UserEditorViewModel
    {
        public User User { get; set; }
        public IEnumerable<Roles> Roles { get; set; }
    }

Usando questo ViewModel , creeremo un modello di editor

Vista / comune / EditorTemplates / UserEditorViewModel.cshtml

@model TemplatesDemo.Models.UserEditorViewModel

<div class="form-group">
    @Html.DisplayNameFor(m => m.User.Id)
    @Html.EditorFor(m => m.User.Id)
</div>
<div class="form-group">
    @Html.DisplayNameFor(m => m.User.Name)
    @Html.EditorFor(m => m.User.Name)
</div>
<div class="form-group">
    @Html.DisplayNameFor(m => m.User.DateOfBirth)
    @Html.EditorFor(m => m.User.DateOfBirth)
</div>
<div class="form-group">
    @Html.DisplayNameFor(m => m.User.Roles.Role)
    @Html.DropDownListFor(m => m.User.RoleId, new SelectList(Model.Roles,"Id","Role"))
</div>

Otterremo l'utente desiderato e l'elenco dei ruoli disponibili e li assoceremo a viewModel UserEditorViewModel nell'azione Controller e invieremo viewModel alla vista. Per semplicità, sto avviando viewModel dall'azione

Azione

 public ActionResult Editor()
        {
            var viewModel = new UserEditorViewModel
            {
                User = new User
                {
                    Id = 1,
                    Name = "Robert",
                    DateOfBirth = DateTime.Now,
                    RoleId = 1
                },
                Roles = new List<Roles>()
                {
                    new Roles
                    {
                        Id = 1,
                        Role = "Admin"
                    },
                    new Roles
                    {
                        Id = 2,
                        Role = "Manager"
                    },
                    new Roles
                    {
                        Id = 3,
                        Role = "User"
                    }
                }
            };

            return View(viewModel);
        }

Possiamo utilizzare il modello di editor creato in qualsiasi visualizzazione desideriamo

vista

@model TemplatesDemo.Models.UserEditorViewModel
    
@using (Html.BeginForm("--Your Action--", "--Your Controller--"))
{
    @Html.EditorForModel()
    <input type="submit" value="Save" />
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow