Как отобразить дополнительные данные только для чтения в режиме редактирования MVC - PullRequest
0 голосов
/ 20 января 2012

У меня есть представление, которое обрабатывает действие «Редактировать» для редактирования еженедельного обновления вашего веса и питания.Редактирование единственной модели - это все хорошо.Я использую EditorFor для создания полей.

Моя проблема в том, что я хочу также показать версию результатов прошлой недели, доступную только для чтения, в качестве руководства, но я хотел бы использовать DisplayFor, чтобы он форматировал bool для отключения флажков и форматировал даты на основе моего форматированияв модели.Я добавил модель в Viewbag и попытался получить к ней доступ, используя @ Html.DisplayFor (x => x.BodyWeight, (myproject.Models.WeeklyReport) ViewBag.LastReport), однако он просто вызывает данные в отправленной моделик представлению, а не к данным Viewbag.Каков наилучший способ отображения данных такого типа при сохранении ограничений / форматирования модели без изменений?

Спасибо.

Просмотр

@model myproject.Models.WeeklyReport

<h2>Weekly Report - Week 1</h2>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <table class="weeklyreport">
        <tr>
            <th>Week</th>
            <td class="result-bold">Goals</td>
            <td>Current Week</td>
        </tr>
        <tr>
            <th>Body Weight</th>
            <td class="result-bold">@Html.DisplayFor(x => x.BodyWeight, (myproject.Models.WeeklyReport)ViewBag.Goals)</td>
            <td>@Html.EditorFor(model => model.BodyWeight)
                @Html.ValidationMessageFor(model => model.BodyWeight)</td>
        </tr>
        <tr>
            <th>Diary Reviewed</th>
            <td class="result-bold">@Html.DisplayFor(x => x.DiaryReviewed, (myproject.Models.WeeklyReport)ViewBag.Goals)</td>
            <td>@Html.EditorFor(model => model.DiaryReviewed)
                @Html.ValidationMessageFor(model => model.DiaryReviewed)</td>
        </tr>
    </table>

Контроллер

public ActionResult Edit(int id)
{
    WeeklyReport goal = new WeeklyReport()
    {  
        BodyWeight = 60,
        DiaryReviewed = true
    };

    WeeklyReport rpt = new WeeklyReport()
    {
        BodyWeight = 68,
        DiaryReviewed = false

    };
    ViewBag.LastReport = goal;
    return View(rpt);
}

1 Ответ

0 голосов
/ 20 января 2012

Вы можете создать модели представления или частичные представления и передать элемент пакета представления частичному.

Пример использования модели представления

 public class WeeklyReportViewModel
    {
      public WeeklyReport LastReport { get; set; }
      public WeeklyReport Report { get; set; }
    }

объединить отчеты

public ActionResult Edit(int id)
{
  WeeklyReport goal = new WeeklyReport()
  {  
    BodyWeight = 60,
    DiaryReviewed = true
  };

  WeeklyReport rpt = new WeeklyReport()
  {
    BodyWeight = 68,
    DiaryReviewed = false

  };

  WeeklyReportViewModel viewmodel = new WeeklyReportViewModel()
  {
    LastReport = goal,
    ActualReport = rpt
  }

  return View(viewmodel);

}

По виду

@model myproject.ViewModels.WeeklyReportViewModel 

@Html.DisplayFor(x => x.LastReport.BodyWeight)
...