ID is null, when I enter the details through the index

2

When I enter the registration details by the ID index it is always null.

  

link

Driver Details:

public ActionResult Detalhes(int? id)
        {
            var disponibilidade = db.Disponibilidade.Where(d => d.DisponibilidadeID == id).FirstOrDefault();

            if (disponibilidade == null)
            {
                return new HttpNotFoundResult();
            }
            DisponibilidadeViewModel model = new DisponibilidadeViewModel()
            {     
                AnoPastoral = disponibilidade.AnoPastoral,
                DiaDisponivel = disponibilidade.DiaDisponivel,
                HoraDisponivel = disponibilidade.HoraDisponivel,
                Observacoes = disponibilidade.Observacoes
            }; 
            return View(model);
        }

Create Controller:

public ActionResult CriarDisponibilidade([Bind(Include = "DisponibilidadeID,AnoPastoral,DiaDisponivel,HoraDisponivel,Observacoes,CatequistaID")] Disponibilidade disponibilidade)
        {
            if (ModelState.IsValid)
            {
                db.Disponibilidade.Add(disponibilidade);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(disponibilidade);
        }

Action Index:

@model IEnumerable<WebAppCatechesis2.ViewModels.DisponibilidadeViewModel>

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_mytemplate.cshtml";
}

<div id="page-wrapper">
    <div class="row">
        <div class="col-lg-12">
            <h1 class="page-header">Lista Disponibilidades de cada catequista</h1>
        </div>
        <!-- /.col-lg-12 -->
    </div>
    <div class="row">
        <div class="col-lg-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                    Futuramente vai ter aqui opções
                </div>
                <div class="panel-body">
                    <div class="table-responsive">
                        <table class="table table-striped table-bordered table-hover">
                            <thead>
                                <tr>
                                    <th class="info">
                                        Nome do Catequista
                                    </th>
                                    <th class="info">
                                        AnoPastoral
                                    </th>
                                    <th class="info">
                                        DiaDisponivel
                                    </th>
                                    <th class="info">
                                        HoraDisponivel
                                    </th>
                                    <th class="info">
                                        Observacoes
                                    </th>
                                    <th class="info">
                                        Opções
                                    </th>
                                </tr>
                            </thead>
                            <tbody>
                                @foreach (var item in Model)
                                {
                                    <tr>
                                        <td>
                                            @Html.DisplayFor(model => item.Nome)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.AnoPastoral)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.DiaDisponivel)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.HoraDisponivel)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(model => item.Observacoes)
                                        </td>
                                        <td>
                                            @Html.ActionLink("Editar", "Editar", new { id = item.DisponibilidadeID }) |
                                            @Html.ActionLink("Detalhes", "Detalhes", new { id = item.DisponibilidadeID }) |
                                            @Html.ActionLink("Apagar", "Apagar", new { id = item.DisponibilidadeID })
                                        </td>
                                    </tr>
                                }
                            </tbody>
                        </table>
                    </div>
                    <!-- /.table-responsive -->
                </div>
                <!-- /.panel-body -->
            </div>
            <!-- /.panel -->
        </div>
        <!-- /.col-lg-6 -->
    </div>
</div>                                     

ViewModel:

 public class DisponibilidadeViewModel
    {
        public int DisponibilidadeID { get; set; }
        public String Nome { get; set; }
        public String AnoPastoral { get; set; }
        public String DiaDisponivel { get; set; }
        public String HoraDisponivel { get; set; }
        public String Observacoes { get; set; }
    }
    
asked by anonymous 15.12.2015 / 20:53

2 answers

3
If you are using a ViewModel for your Views , you must fill DisponibilidadeID , otherwise it will obviously not work:

        DisponibilidadeViewModel model = new DisponibilidadeViewModel()
        {   
            DisponibilidadeID = disponibilidade.DisponibilidadeID,
            AnoPastoral = disponibilidade.AnoPastoral,
            DiaDisponivel = disponibilidade.DiaDisponivel,
            HoraDisponivel = disponibilidade.HoraDisponivel,
            Observacoes = disponibilidade.Observacoes
        }; 

Problem Controller Index:

Select new DisponibilidadeViewModel { Nome = p.Nome, DisponibilidadeID = d.DisponibilidadeID, AnoPastoral = d.AnoPastoral, DiaDisponivel = d.DiaDisponivel, HoraDisponivel = d.HoraDisponivel, Observacoes = d.Observacoes });

Missing: DisponibilidadeID = d.DisponibilidadeID

    
15.12.2015 / 22:07
0

From my experience I can tell you the following.

If you change the URL to:

  

link

It will work the way it is ...

Now, to make this question URL work, you simply put the following line in the file Route.Config.cs

        routes.MapMvcAttributeRoutes();

It would look like this:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapMvcAttributeRoutes();


            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

And put the following annotation in your method:

    [Route("seucontrole/detalhes/{id}")]

As a result, the route with /0 works.

    
15.12.2015 / 21:07