Asp.net MVC 2 ошибка приложения - PullRequest
1 голос
/ 18 августа 2010

Ошибка сервера в приложении '/'.

Элемент модели, переданный в словарь, имеет тип 'Develosoft4.Models.Cita', но для этого словаря требуется элемент модели типа 'Develosoft4.Models.CitaFormViewModel '.

Описание: необработанное исключение произошло во время выполнения текущего веб-запроса.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: элемент модели, переданный в словарь, имеет тип 'Develosoft4.Models.Cita', но для этого словаря требуется элемент модели типа 'Develosoft4.Models.CitaFormViewModel'.

Ошибка источника:

Произошло необработанное исключение во время выполнения текущего веб-запроса.Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Это файл Create.aspx, который выдает ошибку:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Develosoft4.Models.CitaFormViewModel>" %>
    <h2>Create</h2>

    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <legend></legend>


            <div class="editor-label">
                <%: Html.LabelFor(model => model.Cita.materia)%>
            </div>
            <div class="editor-field">

                <%: Html.DropDownListFor(model => model.Cita.materia, Model.Materias)%>
                <%: Html.ValidationMessageFor(model => model.Cita.materia)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Cita.cubiculo)%>
            </div>
            <div class="editor-field">
                <%: Html.DropDownListFor(model => model.Cita.cubiculo, Model.Cubiculos)%>
                <%: Html.ValidationMessageFor(model => model.Cita.cubiculo)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Cita.profesor)%>
            </div>
            <div class="editor-field">
                <%: Html.DropDownListFor(model => model.Cita.profesor, Model.Profesores)%>
                <%: Html.ValidationMessageFor(model => model.Cita.profesor)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Cita.fecha)%>
            </div>
            <div class="editor-field">

                <%: Html.ValidationMessageFor(model => model.Cita.fecha)%>
                    <form>
   <input type="text" name="fecha" id="campofecha">
</form>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Cita.horaInicio)%>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Cita.horaInicio)%>
                <%: Html.ValidationMessageFor(model => model.Cita.horaInicio)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Cita.horaFinal)%>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Cita.horaFinal)%>
                <%: Html.ValidationMessageFor(model => model.Cita.horaFinal)%>
            </div>

            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

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

ЭтоCitaFormViewModel.cs

using System.Web.Mvc;

namespace Develosoft4.Models
{
    public class CitaFormViewModel
    {
        private static CubiculoRepository cubiculosRepository = new CubiculoRepository();
        private static MateriaRepository materiasRepository = new MateriaRepository();
        private static ProfesorRepository profesorRepository = new ProfesorRepository();

    // Properties
        public Cita Cita { get; private set; }
        public SelectList Cubiculos { get; private set; }
        public SelectList Materias { get; private set; }
        public SelectList Profesores { get; private set; }
    // Constructor
        public CitaFormViewModel(Cita cita)
        {
            Cita = cita;
            Cubiculos = new SelectList(cubiculosRepository.FindAllCubiculos(),"id","nombre", cita.cubiculo);
            Materias = new SelectList(materiasRepository.FindAllMaterias(), "id", "nombre", cita.materia);
            Profesores = new SelectList(profesorRepository.FindAllProfesores(), "id", "nombre", cita.profesor);
        }
    }
}

CitaController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Develosoft4.Models;


namespace Develosoft4.Controllers
{
    public class CitaController : Controller
    {
        CitaRepository repository = new CitaRepository();

        //
        // GET: /Cita/
       [Authorize (Roles= "director")]
       public ActionResult Index(int page = 0)
        {
            const int pageSize = 10;

            var citas = repository.FindAllCitas();
            var paginatedCita = new PaginatedList<Cita>(citas,page,pageSize);
            return View(paginatedCita);
        }
        //
        // GET: /Cita/Details/2

        public ActionResult Details(int id)
        {
            Cita cita = repository.GetCita(id);

            if (cita == null)
                return View("NotFound");
            else
                return View("Details", cita);
        }
        //
        // GET: /Cita/Edit/2

        public ActionResult Edit(int id)
        {
            Cita cita = repository.GetCita(id);
            CitaFormViewModel viewModel = new CitaFormViewModel(cita);
            return View(viewModel);
        }

        //
        // POST: /Cita/Edit/2
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, FormCollection formValues)
        {
            Cita cita = repository.GetCita(id);

            try
            {
                UpdateModel(cita);
                repository.Save();
                return RedirectToAction("Details", new { id = cita.id });
            }
            catch
            {
                //ModelState.AddRuleViolations(materia.GetRuleViolations());

                return View(cita);
            }
        }

        //
        // GET: /Cita/Create
        public ActionResult Create()
        {
           Cita cita = new Cita();
            return View( new CitaFormViewModel( cita));
        }
        //
        // POST: /Cita/Create

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(Cita cita)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    repository.Add(cita);
                    repository.Save();
                   return RedirectToAction("Details", new { id = cita.id });
                }
                catch
                {
                    //ModelState.AddRuleViolations(materia.GetRuleViolations());
                }
            }

            return View(cita);
        }

        //
        // HTTP GET: /Cita/Delete/1

        public ActionResult Delete(int id)
        {
            Cita cita = repository.GetCita(id);

            if (cita == null)
                return View("NotFound");
            else
                return View();
        }

        // actitud
        // HTTP POST: /Cita/Delete/1

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Delete(int id, string confirmButton)
        {
            Cita cita = repository.GetCita(id);

            if (cita == null)
                return View("NotFound");

            repository.Delete(cita);
            repository.Save();

            return View("Deleted");
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 августа 2010

Вы пытаетесь передать вашей модели объект типа Develosoft4.Models.Cita, когда он ожидает объект типа Develosoft4.Models.CitaFormViewModel.

Возможно, у вас строго типизированное представление, поэтому вам нужно передать его типом

Проверьте свой контроллер, когда у вас должно получиться что-то вроде этого в конце:

return View(new Develosoft4.Models.CitaFormViewModel()
    {
        // initializers
    });

Не знаю, как на самом деле выглядит ваш код, так что это удар в темноте:)

РЕДАКТИРОВАТЬ: На основе кода, который вы добавили, похоже, что ваша Post версия Create возвращает неверный тип в представление.

Вы делаетеэто:

return View(cita); 

Когда ваше представление Create ожидает CitaFormViewModel, поэтому вы, вероятно, должны делать следующее:

return View(new CitaFormViewModel(cita));

Так же, как вы сделали в версии GetCreate вид.

0 голосов
/ 18 августа 2010

Элемент модели, передаваемый в словарь, имеет тип 'Develosoft4.Models.Cita', но для этого словаря требуется элемент модели типа 'Develosoft4.Models.CitaFormViewModel'

Itпохоже, что вы возвращаете неправильный тип модели из метода действия.

//This is where I think the error is. It is expecting a CityFormViewModel instead of a Cita object
return View(citaModel);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...