Entity Framework: значение из текстового поля в представлении возвращает ноль - PullRequest
0 голосов
/ 02 июля 2018

Мне нужно отфильтровать некоторый список с помощью ввода от пользователя. Я создал представление и использовал столбцы, которые он генерировал автоматически. Нет проблем с колонкой Codigo, но с Cedula или Email, она не работает, и мне нужно использовать текстовые поля, которые работают.

Buscar expediente Solicitante por celuda: @Html.TextBox("Cedula")<br/>
Buscar expediente funcionario por celuda: @Html.TextBox("Email")<br />

Вот код моего контроллера. Когда я помещаю что-то в текстовое поле Codigo, оно получает значение без проблем, но когда я делаю то же самое с Cedula или Email, оно становится только нулевым. Есть идеи, что происходит?

[HttpPost]
public ActionResult BuscarExpediente(int? Codigo , int? Cedula, string Email)
{
    //Expediente expediente = db.Expediente.Find(id);
    //var expediente = db.Expediente.SingleOrDefault(e => e.Codigo == id);
    //si me dan el id de expediente lo busco de esta forma
    if ((Codigo != null) &&(Cedula == null) &&(Email == null))
    {
        //var expediente = db.Expediente.Where(E => E.Codigo == Codigo).SingleOrDefault();
        //return View(expediente);
        TempData["idExpedienteBuscar"] = Codigo;
        return RedirectToAction("ExpedientesPorId");
    }

    //si me dal la cedula de un solicitante busco de esta forma
    if((Cedula != null)&& (Email == null)&& (Codigo == null))
    {
        TempData["ExpedientesCedulaSolicitante"] = Cedula;
        return RedirectToAction("ExpedientesPorCedulaSolicitante");
    }

    //si me dan un funcionario busco de esta forma
    if((Email != null)&& (Codigo == null) && (Cedula == null))
    {
        TempData["ExpedienteBuscarFuncionarioID"] = Email;
        return RedirectToAction("ExpedientesPorFuncionario");
    }
    //si no me dan nada busco de estra otra
    else
    {
        //que de el mensaje de que solo se puede insertar un campo de busqueda
        //hay que poner en el view un label o algo para tirar el msj
    }

    //ViewBag.FechInicio = expediente.FechaCreacion;
    //ViewBag.Tramite = expediente.Tramite.Titulo;
    //ViewBag.Funcionario = expediente.Funcionario.Nombre;
    return View();
}

Вот код вида

@model Entrega02Programacion03.Models.Expediente

@{
    ViewBag.Title = "BuscarExpediente";
}

<h2>BuscarExpediente</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Expediente</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Codigo, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Codigo, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Codigo, "", new { @class = "text-danger" })
            </div>
        </div>
       @* Buscar expediente Solicitante por celuda: @Html.TextBox("Cedula")<br/>
        Buscar expediente funcionario por celuda: @Html.TextBox("Email")<br />*@
        <div class="form-group">
            @Html.LabelFor(model => model.Solicitante.Cedula , htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Solicitante.Cedula, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Solicitante.Cedula, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Funcionario.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Funcionario.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Funcionario.Email, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.abierto, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.abierto, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.abierto, "", new { @class = "text-danger" })
            </div>
        </div>


        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Buscar Expediente" class="btn btn-default" />
            </div>
        </div>
    </div>

}

        <div>
            @Html.ActionLink("Back to List", "Index")
        </div>

1 Ответ

0 голосов
/ 02 июля 2018

Похоже на поля, которые недоступны, потому что они не находятся на «корневом» уровне - они доступны «внутри» других моделей. Попробуйте переключить вашу модель на:

[HttpPost]
public ActionResult BuscarExpediente(Entrega02Programacion03.Models.Expediente model)
{
    int? Codigo = model.Codigo;
    int? Cedula = model.Solicitante?.Cedula;
    string Email = model.Funcionario?.Email;

    //Expediente expediente = db.Expediente.Find(id);
    //var expediente = db.Expediente.SingleOrDefault(e => e.Codigo == id);
    //si me dan el id de expediente lo busco de esta forma
    if ((Codigo != null) &&(Cedula == null) &&(Email == null))
    {

        //var expediente = db.Expediente.Where(E => E.Codigo == Codigo).SingleOrDefault();
        //return View(expediente);
        TempData["idExpedienteBuscar"] = Codigo;
        return RedirectToAction("ExpedientesPorId");

    }
    //si me dal la cedula de un solicitante busco de esta forma
    if((Cedula != null)&& (Email == null)&& (Codigo == null))
    {
        TempData["ExpedientesCedulaSolicitante"] = Cedula;
        return RedirectToAction("ExpedientesPorCedulaSolicitante");

    }
    //si me dan un funcionario busco de esta forma
    if((Email != null)&& (Codigo == null) && (Cedula == null))
    {
        TempData["ExpedienteBuscarFuncionarioID"] = Email;
        return RedirectToAction("ExpedientesPorFuncionario");
    }
    //si no me dan nada busco de estra otra
     else
    {
        //que de el mensaje de que solo se puede insertar un campo de busqueda
        //hay que poner en el view un label o algo para tirar el msj
    }

    //ViewBag.FechInicio = expediente.FechaCreacion;
    //ViewBag.Tramite = expediente.Tramite.Titulo;
    //ViewBag.Funcionario = expediente.Funcionario.Nombre;
    return View();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...