Как отправить полную модель представления в другое представление? - PullRequest
0 голосов
/ 29 июля 2011

Я использую MVC3 (бритву) и пытаюсь заставить работать следующее.

У меня есть список фрагментов. Эти фрагменты имеют некоторые общие настройки, а затем перевод на неизвестное количество языков.

Теперь я пытаюсь сделать следующее:

На странице «Создать» (URL: Экран ) фрагмента я задаю общие настройки. под этим есть список заполненных переводов (пуст в начале). Когда вы нажимаете кнопку «Opslaan», я хочу, чтобы форма сохраняла общие настройки и список переводов.

Когда я нажимаю кнопку «Добавить», я хочу отправить полную модель просмотра (настройки + список переводов) на другую страницу, где я могу заполнить перевод. После того, как я заполнил переводы, я хочу вернуться на эту страницу (url: Screen ). Здесь перевод заполняется в списке.

Теперь я делаю что-то не так, потому что не могу заставить модель представления отправить на 2-ю страницу.

это мой код:

кнопка «добавить перевод»:

@Html.ActionLink("Add", "CreateTranslation", new { oSnippeteditviewmodel = this.Model }, null)

SnippetController:

public ActionResult Create()
{
    SnippetEditViewModel oItem = new SnippetEditViewModel();
    oItem.lSnippetsPerLanguage = new List<SnippetPerLanguageEditViewModel>();
    return View(oItem);
} 

[HttpPost]
public ActionResult Create(SnippetEditViewModel Snippeteditviewmodel)
{
    if (ModelState.IsValid)
    {
        Snippeteditviewmodel.Bookmark = Snippeteditviewmodel.Bookmark.Replace(' ', '_');
        _repoSnippet.CreateSnippet(Snippeteditviewmodel);
        return RedirectToAction("Index");  
    }

    return View(Snippeteditviewmodel);
}

public ActionResult CreateTranslation(SnippetEditViewModel oSnippeteditviewmodel)
{
    return View(oSnippeteditviewmodel);
} 

А в контроллере действие CreateTranslation объект 'oSnippeteditviewmodel' остается нулевым.

а у кого проблемы с симуляцией? Или решение?

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Во-первых, вы должны попытаться сгенерировать ссылку действия, подобную этой

@Html.ActionLink("Add", "CreateTranslation", this.Model, null)

В этом случае mvc попытается передать правильно сериализованные значения модели для вашей ссылки, и если ваша модель достаточно проста, CreateTranslations получит свою модель правильно. Но я бы так не поступил. Сгенерированная ссылка является статической. Что если пользователь изменит значения фрагмента на стороне клиента? Когда дело доходит до добавления перевода, все измененные значения формы будут потеряны (ссылка пройдет начальные, сгенерированные сервером значения). Итак, вы должны попробовать одно из следующих действий

  1. Создайте форму с двумя кнопками, одна для CratingTranslation и одна для сохранения. При создании перевода динамически изменяйте параметры действия и параметры метода на GET действие CreateTranslation. Таким образом, форма будет сериализовать все свои текущие настройки фрагмента и перейти к требуемому действию, и вы получите текущую модель фрагмента, переданную действию CreateTranslation.
  2. Используйте ajax. Просто динамически вставьте поля ввода создания перевода в одну и ту же страницу. Это просто и более удобно для пользователя (без набора переходов), и зарезервировано больше http-трафика (передача всех переводов и фрагмента на вторую страницу, а затем возврат всех этих + 1 переводов может привести к неприятностям). Я бы порекомендовал этот подход. Это гораздо проще, чем первый или ваши подходы.
0 голосов
/ 29 июля 2011

Я не получаю вас правильно, но если вы хотите добавить данные с помощью контроллера «create», вам не нужно указывать объект в «oSnippeteditviewmodel».Вы можете получить все данные формы с помощью

Request.Form ["controlName"]

, заполнить элемент данных Snippeteditviewmodel и сохранить его.

...