Use two entities in the same View

0

I have a table, which returns the holiday records of each employee, and I need to create a page where the user can request the change of that period. However, the demand requires that the data be in the same "table". So, I need to do a foreach on the vacation table, and put the change fields (request table) in the same view.

This image exemplifies the final result that I need to get.

Inthiscase,theStartDateandEndDatebelongstotheVacationclass,andtheremaindertheclassrequest.Myrequestisthattheuserclickedit,thetablewillenablethefieldsChangestartdateandenddatechange,sotheuserputthedateshewants,andsoIsavethisdatainthedatabase,intherequesttable.>

Inthedatabase,Ireturnthedata"Start Date and End Date" of a View, called Holidays, and the data "Start Date Change and Final Date Change" should be saved in a table called Requirements. >

I do not know how I can do this, if I use ViewModel, javascript, Jquery, etc.

Save method:

[HttpPost]
        public ActionResult Ferias(Requerimento requerimento)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    requerimento.sLotacao = SessionHelper.Lotacao;
                    requerimento.sNome = SessionHelper.Nome;
                    if (SessionHelper.Celular == null || SessionHelper.Celular == " ")
                    {
                        requerimento.sTelefone = SessionHelper.Telefone;
                    }
                    else
                    {
                        requerimento.sCelular = SessionHelper.Celular;
                    }

                    requerimento.sEndereco = SessionHelper.Endereco;
                    requerimento.sEmail = SessionHelper.Email;
                    requerimento.sVinculo = SessionHelper.Vinculo;
                    requerimento.sCargo = SessionHelper.Cargo;
                    requerimento.dtDataRequerimento = DateTime.Now;
                    requerimento.iMatricula = SessionHelper.Matricula;
                    requerimento.sSituacao = "Aberto";
                    requerimento.sTipoRequerimento = "Ferias";
                    requerimentosRepository.Inserir(requerimento);
                    TempData["Mensagem"] = "Requerimento cadastrado com sucesso";
                }
                catch (Exception ex)
                {
                    TempData["Mensagem"] = ex.Message;

                }
                return RedirectToAction("MeusRequerimentos");
            }
            var errors = ModelState.Values.SelectMany(v => v.Errors);
            Debug.Write(errors);
            return View(requerimento);
        }

View:

@model IEnumerable<PortalRH.DomainModel.Entities.FuncionariosFerias>

@{
    ViewBag.Title = "Minhas Férias";
}

<div class="Nome">
    <p><strong><font face="Arial" size="2"> @ViewBag.Matricula / @ViewBag.Contrato - @ViewBag.Nome</font></strong></p>
</div>
<div class="mapLocal">
    <img src="~/Content/img/sitemap.ico" width="19" height="19" /> Você está em: <i>@ViewBag.Title</i>
</div>
<br />
<div class="row">
    <div class="col-md-2">

    </div>
    <div class="col-md-8">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h5><strong>Férias</strong></h5>
            </div>

            <table class="table table-condensed">
                <tr>
                    <th>Inicio Férias</th>
                    <th>Fim Férias</th>
                    <th>Inicio Férias Alteração</th>
                    <th>Fim Férias Alteração</th>
                    <th></th>
                </tr>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>@Html.DisplayFor(modelItem => item.DtInicioPeriodo)</td>
                        <td>@Html.DisplayFor(modelItem => item.DtFimPeriodo)</td>
                        <td>@Html.DisplayFor(modelItem => item.DtInicioAlteracao)</td>
                        <td>@Html.DisplayFor(modelItem => item.DtFimAlteracao)</td>
                        <td>Editar</td>
                    </tr>
                }
            </table>
            </div>
        </div>
    </div>
    
asked by anonymous 30.01.2015 / 12:35

1 answer

3

You can create a single ViewModel that includes the Vacation and Request information you want to save.

ViewModel represents a set of one or more Models and other data that will be represented in a View that needs to display a particular set of information.

Example:

public class SeuViewModel
{
   //Todas as propriedade que você deseja utilizar na View

   //Informações de Férias...
   public int IdFerias { get; set; }
   public string DtInicioPeriodo { get; set; }
   public string DtFimPeriodo { get; set; }

   //Informações de Requerimento...
   public int IdRequerimento { get; set; }
   public string DtInicioAlteracao { get; set; }
   public string DtFimAlteracao { get; set; }
}

Your View must be typed according to your Model so that you can access all the information:

@model ...SeuViewModel

<html>
    <body>
        @using (Html.BeginForm())
        {
            ...               
        }
    </body>
</html>

In your Controller, your Post action will receive an object from your Model:

[HttpGet]
public ActionResult Ferias(SeuViewModel seuViewModel)
{
    if (ModelState.IsValid)
    {

        //Através do objeto seuViewModel, você obtem os dados informados 
        //e monta os objetos que deseja salvar.      

        ...
        var ferias = seu_repositorio.ObterFeriasPorId(seuViewModel.IdFerias);
        ferias.DataInicio = seuViewModel.DtInicioPeriodo;
        ferias.DataFim = seuViewModel.DtIFimPeriodo;

        var requerimento = seu_repositorio.ObterRequerimentoPorId(seuViewModel.IdRequerimento);
        requerimento.DataInicioAlteracao = seuViewModel.DtInicioAlteracao;
        requerimento.DataFimAlteracao = seuViewModel.DtFimAlteracao;
        ...
    } 
    ...
}

If it is a "list" of holidays and requirements you still have your ViewModel, but you can create others to use within it, for example:

public class SeuViewModel
{
   //Todas as propriedade que você deseja utilizar na View
   ...
   public IList<FeriasViewModel> { get; set; }
   public IList<RequerimentoViewModel> { get; set; }       
}

public class FeriasViewModel
{
   //Informações de Férias...
   public int IdFerias { get; set; }
   public string DtInicioPeriodo { get; set; }
   public string DtFimPeriodo { get; set; }
}

public class RequerimentoViewModel
{
   //Informações de Requerimento...
   public int IdRequerimento { get; set; }
   public string DtInicioAlteracao { get; set; }
   public string DtFimAlteracao { get; set; }
}

Your View continues typed according to your Model so you can access all the information, eg:

@model ...SeuViewModel

<html>
    <body>
        @using (Html.BeginForm())
        {
            ...      
            @foreach (var item in Model.Ferias)
            {
                <tr>
                    <td>@Html.HiddenFor(modelItem => item.IdFerias)</td>
                    <td>@Html.DisplayFor(modelItem => item.DtInicioPeriodo)</td>
                    <td>@Html.DisplayFor(modelItem => item.DtFimPeriodo)</td>
                    <td>Editar</td>
                </tr>
            }

            ...      
            @foreach (var item in Model.Requerimentos)
            {
                <tr>
                    <td>@Html.HiddenFor(modelItem => item.IdRequerimento)</td>
                    <td>@Html.DisplayFor(modelItem => item.DtInicioPeriodo)</td>
                    <td>@Html.DisplayFor(modelItem => item.DtFimPeriodo)</td>
                    <td>Editar</td>
                </tr>
            }
            ...       
        }
    </body>
</html>

On your Controller, your Post action continues to receive an object from your Model. You'll get vacation lists and applications and save them:

[HttpGet]
public ActionResult Ferias(SeuViewModel seuViewModel)
{
    if (ModelState.IsValid)
    {

        //Através do objeto seuViewModel, você obtem os dados informados 
        //e monta os objetos que deseja salvar.      

        ...
        foreach (var item in seuViewModel.Ferias)
        {
           var ferias = seu_repositorio.ObterFeriasPorId(item.IdFerias);
           ferias.DataInicio = seuViewModel.DtInicioPeriodo;
           ferias.DataFim = seuViewModel.DtIFimPeriodo;
        }

        foreach (var item in seuViewModel.Requerimentos)
        {
           var requerimento = seu_repositorio.ObterRequerimentoPorId(seuViewModel.IdRequerimentos);
           requerimento.DataInicioAlteracao = seuViewModel.DtInicioAlteracao;
           requerimento.DataFimAlteracao = seuViewModel.DtFimAlteracao;
        ...
    } 
    ...
}
    
30.01.2015 / 14:25