оба создают и перечисляют в одном представлении MVC3

#asp.net-mvc-3

#asp.net-mvc-3

Вопрос:

итак, что я пытаюсь сделать, это представление с созданием и списком в одном представлении, поэтому я прочитал, что я могу использовать ViewModel для этого, поэтому я создаю свою модель представления «EventoViewModel»

  public class EventoViewModel
    {
        public Eventos Eventos { get; set; }
        public IEnumerable<Eventos> LEventos { get; set; } 
    }
  

мой контроллер:

  public ActionResult Create()
        {

            return View();
        }

        [HttpPost]
        public ActionResult Create(Eventos eventos)
        {
            if (ModelState.IsValid)
            {
                db.Eventos.AddObject(eventos);
                db.SaveChanges();
            }
            return RedirectToAction("Create");
        }
  

Мое мнение: в части foreach я получаю СООБЩЕНИЕ об ОШИБКЕ, скажем, исключение NullReferenceException, что я делаю не так?

 @model createList.Models.EventoViewModel

<h2>Create</h2>

@using (Html.BeginForm()) {
    <fieldset>

            <div class="editor-label">
            @Html.LabelFor(model => model.Eventos.Nombre)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Eventos.Nombre)               
        </div>

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


<table>
    <tr>
        <th>
            Nombre
        </th>
    </tr>

@foreach (var item in Model.LEventos) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Nombre)
        </td>
    </tr>
}

</table>
  

Комментарии:

1. Итак, в чем вопрос?

2. в части foreach, на мой взгляд, я получаю СООБЩЕНИЕ об ОШИБКЕ, скажем, исключение NullReferenceException, что я делаю не так?

3. Очевидной возможностью является эта модель. LEventos не инициализирован и, следовательно, исключение NullReferenceException

4. да, я хотел знать, где я должен его инициализировать

5. Я даже не вижу в вашем действии, где вы создаете экземпляр модели типа EventoViewModel , и я не вижу, где вы передаете его в рассматриваемое представление.

Ответ №1:

Я меняю свой подход, теперь я использую частичный просмотр. и создайте частичное представление «Список»

Частичное представление: список

 @model IEnumerable<createList.Models.Eventos>

<table>
    <tr>
        <th>
            Nombre
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Nombre)
        </td>
    </tr>
}
</table>
  

и в конце моего представления «создать» я называю свой частичный вид «Список»

 @model createList.Models.Eventos

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Eventos</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Nombre)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Nombre)
            @Html.ValidationMessageFor(model => model.Nombre)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
**@{Html.RenderAction("list", "Evento");}** // call de action "list"

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

и мои контроллеры:

 public ViewResult List()
        {
            return View(db.Eventos.ToList()); //past a list of eventos
        }


 public ActionResult Create()
        {
            return View();
        } 

        [HttpPost]
        public ActionResult Create(Eventos eventos)
        {
            if (ModelState.IsValid)
            {
                db.Eventos.AddObject(eventos);
                db.SaveChanges();
                return RedirectToAction("Create");  
            }

            return View(eventos);
        }