Usando o calendário pop-up datepicker de interface do usuário html5 e jQuery com ASP.NET MVC – Parte 3

por Rick Anderson

Este tutorial ensinará os conceitos básicos de como trabalhar com modelos de editor, modelos de exibição e o calendário pop-up jQuery UI datepicker em um aplicativo Web ASP.NET MVC.

Trabalhando com tipos complexos

Nesta seção, você criará uma classe de endereço e aprenderá a criar um modelo para exibi-lo.

Na pasta Modelos , crie um novo arquivo de classe chamado Person.cs em que você colocará dois tipos: uma Person classe e uma Address classe. A Person classe conterá uma propriedade digitada como Address. O Address tipo é um tipo complexo, o que significa que não é um dos tipos internos, como int, stringou double. Em vez disso, ele tem várias propriedades. O código para as novas classes tem esta aparência:

public class Address {
    public string StreetAddress { get; set; }
    public string City { get; set; }
    public string PostalCode { get; set; }
}

public class Person {
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public Address HomeAddress;
}

Movie No controlador, adicione a seguinte PersonDetail ação para exibir uma instância de pessoa:

public ActionResult PersonDetail(int id = 0) {
     return View(GetPerson(id));
}

Em seguida, adicione o seguinte código ao Movie controlador para preencher o Person modelo com alguns dados de exemplo:

Person GetPerson(int id) {
    var p = new Person
    {
        ID = 1,
        FirstName = "Joe",
        LastName = "Smith",
        Phone = "123-456",
        HomeAddress = new Address
        {
            City = "Great Falls",
            StreetAddress = "1234 N 57th St",
            PostalCode = "95045"
        }
    };
    return p;
}

Abra o arquivo Views\Movies\PersonDetail.cshtml e adicione a marcação a seguir para o modo de exibição PersonDetail .

@model Person
@{
    ViewBag.Title = "PersonDetail";
}
<h2>Person Detail</h2>
@Html.DisplayForModel()

Pressione Ctrl+F5 para executar o aplicativo e navegue até Filmes/PersonDetail.

A PersonDetail exibição não contém o Address tipo complexo, como você pode ver nesta captura de tela. (Nenhum endereço é mostrado.)

Captura de tela da janela Filme jQuery mostrando o modo de exibição PersonDetail e os campos ID, Nome, Sobrenome e Telefone.

Os Address dados do modelo não são exibidos porque são um tipo complexo. Para exibir as informações de endereço, abra o arquivo Views\Movies\PersonDetail.cshtml novamente e adicione a marcação a seguir.

@Html.DisplayFor( x => x.HomeAddress )

A marcação completa para o modo de exibição agora é semelhante a PersonDetail esta:

@model MvcMovie.Models.Person

@{
    ViewBag.Title = "PersonDetail";
}

<h2>Person Detail</h2>

@Html.DisplayForModel()
@Html.DisplayFor( x => x.HomeAddress )

Execute o aplicativo novamente e exiba o modo de exibição PersonDetail . As informações de endereço agora são exibidas:

Captura de tela da janela Filme jQuery mostrando o modo de exibição PersonDetail com os novos campos Endereço de Rua, Cidade e Cep.

Criando um modelo para um tipo complexo

Nesta seção, você criará um modelo que será usado para renderizar o Address tipo complexo. Quando você cria um modelo para o Address tipo, ASP.NET MVC pode usá-lo automaticamente para formatar um modelo de endereço em qualquer lugar do aplicativo. Isso oferece uma maneira de controlar a renderização do Address tipo de apenas um lugar no aplicativo.

Na pasta Views\Shared\DisplayTemplates , crie uma exibição parcial fortemente tipada chamada Endereço:

Captura de tela da janela Adicionar Exibição com Endereço no campo Nome da exibição e criar uma exibição fortemente tipada e Criar como uma exibição parcial marcada.

Clique em Adicionar e abra o novo arquivo Views\Shared\DisplayTemplates\Address.cshtml . A nova exibição contém a seguinte marcação gerada:

@model MvcMovie.Models.Address

<fieldset>
    <legend>Address</legend>

    <div class="display-label">StreetAddress</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.StreetAddress)
    </div>

    <div class="display-label">City</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.City)
    </div>

    <div class="display-label">PostalCode</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.PostalCode)
    </div>
</fieldset>

Execute o aplicativo e exiba a exibição PersonDetail . Desta vez, o Address modelo que você acabou de criar é usado para exibir o Address tipo complexo, portanto, a exibição se parece com o seguinte:

Captura de tela da janela Filme jQuery mostrando a exibição Detalhes da Pessoa com uma nova caixa Endereço ao redor dos campos Endereço da Rua, Cidade e Cep.

Resumo: maneiras de especificar o formato e o modelo de exibição do modelo

Você viu que pode especificar o formato ou modelo para uma propriedade de modelo usando as seguintes abordagens:

  • Aplicando o DisplayFormat atributo a uma propriedade no modelo. Por exemplo, o código a seguir faz com que a data seja exibida sem a hora:

    [DisplayFormat(DataFormatString = "{0:d}")]
    public DateTime ReleaseDate { get; set; }
    
  • Aplicando um atributo DataType a uma propriedade no modelo e especificando o tipo de dados. Por exemplo, o código a seguir faz com que a data seja exibida sem a hora.

    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }
    

    Se o aplicativo contiver um modelo date.cshtml na pasta Views\Shared\DisplayTemplates ou na pasta Views\Movies\DisplayTemplates , esse modelo será usado para renderizar a DateTime propriedade. Caso contrário, o sistema de modelagem ASP.NET interno exibirá a propriedade como uma data.

  • Criando um modelo de exibição na pasta Views\Shared\DisplayTemplates ou na pasta Views\Movies\DisplayTemplates cujo nome corresponde ao tipo de dados que você deseja formatar. Por exemplo, você viu que Views \Shared\DisplayTemplates\DateTime.cshtml foi usado para renderizar DateTime propriedades em um modelo, sem adicionar um atributo ao modelo e sem adicionar nenhuma marcação aos modos de exibição.

  • Usando o atributo UIHint no modelo para especificar o modelo para exibir a propriedade do modelo.

  • Adicionando explicitamente o nome do modelo de exibição à chamada Html.DisplayFor em um modo de exibição.

A abordagem que você usa depende do que você precisa fazer em seu aplicativo. Não é incomum misturar essas abordagens para obter exatamente o tipo de formatação de que você precisa.

Na próxima seção, você alternará um pouco as engrenagens e deixará de personalizar como os dados são exibidos para personalizar como eles são inseridos. Você conectará o datepicker jQuery às exibições de edição no aplicativo para fornecer uma maneira rápida de especificar datas.