2015-02-24 5 views
0

Я работаю над небольшим приложением ASP.NET MVC 4 в сочетании с MongoDB. В настоящее время у меня есть 4 мнения: индекс, создание, список, редактирование. Создать - это форма для размещения данных в базе данных. Список - это список для отображения данных. Редактировать - это форма для редактирования данных. Эти три представления отображаются внутри представления Index (RenderAction).Скрыть/Посмотреть Редактировать форму просмотра

Цель состоит в том, чтобы отображать только два вида внутри индексного вида. Комбинация индекса с Create или комбинация Index с Edit.

В этот момент у меня возникли проблемы с Edit View (внутри контроллера):

[HttpGet] 
public ActionResult Edit(string id) 
     { 
       Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id)); 
       return View(car.ConvertToUpdateViewModel()); 
     } 

Изменить вид:

@model MvcApplication1.ViewModels.UpdateCarViewModel 

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

    <fieldset> 
     <legend>UpdateCarViewModel</legend> 

     @Html.HiddenFor(model => model.Id) 

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

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

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

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

Индекс Вид:

@model MvcApplication1.ViewModels.InsertCarViewModel 

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
</head> 
<body> 

    <div> 
     @{Html.RenderAction("Create", Model);} 
    </div> 

    <div> 
     @{Html.RenderAction("List", Model);} 
    </div> 

    <div> 
     @{Html.RenderAction("Edit", Model);} 
    </div> 
</body> 
</html> 

Очевидно в представлении «Редактировать» требуется идентификатор для отображения, и теперь он получает ошибку, когда я использую RenderAction, потому что есть нет идентификатора, когда я запускаю приложение. Я хочу скрыть это представление, когда он не нужен, и отображать это представление только тогда, когда это необходимо. Как я могу достичь этого без Javascript/JQuery.

Должен ли я иметь оператор if/else внутри моего ActionResult?

+0

Не могли бы вы разместить существующий 'View' – ediblecode

+0

Я отредактировал свой вопрос. В моем представлении индекса у меня есть 3 div's. В каждом div есть '@ {Html.RenderAction (« Вид », Модель);}' – bbvanee

+0

Я хотел увидеть ваш «Индекс», извинения. – ediblecode

ответ

1

Самый простой и быстрый, что нужно сделать было бы просто проверить, если id имеет значение

[HttpGet] 
public ActionResult Edit(string id) 
{ 
    if (String.IsNullOrEmpty(id)) 
    { 
     return null; 
    } 

    Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id)); 
    return View(car.ConvertToUpdateViewModel()); 
} 
+0

Я пробовал этот код, и он работает. Но когда я вводил данные с формой «Создать», и я оставляю поля пустыми, проверка правильности данных не попадает в базу данных. Это работает правильно. Но форма редактирования отображается, когда я нажимаю на эту же кнопку. Я думаю, это потому, что он получает идентификатор? – bbvanee

0

Это не проблема, в MVC Edit контроллер обычно имеет параметров идентификатор, так, чтобы устранить вашу проблему вы можете просто проверьте, существует ли идентификатор:

[HttpGet] 
public ActionResult Edit(string id) 
{ 
     Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id)); 

     if (car != null) 
     { 
      return View(car.ConvertToUpdateViewModel()); 
     } 

     //if we get this far show other view 
     return View(); 
} 
Смежные вопросы