我正在使用MVC3(razor),我正在努力让以下工作。
我有一个片段列表。这些片段有一些常规设置,然后为未知的语言翻译。
现在我正在尝试执行以下操作:
在代码段的“创建”页面(网址:Screen)上,我设置了常规设置。在那之下有一个填写翻译的列表(开头是空的)。当您按下“Opslaan”按钮时,我希望表单保存常规设置和翻译列表。
当我按下“添加”按钮时,我想将完整的视图模型(设置+翻译列表)提交到我可以填写翻译的其他页面。在我填写翻译后,我想返回此页面(网址:Screen)。在这里,翻译填写在列表中。
现在我做错了,因为我无法让viewmodel提交到第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'保持为空。
有类似问题的annyone?还是一个解决方案?答案 0 :(得分:2)
首先,你应该尝试生成像这样的动作链接
@Html.ActionLink("Add", "CreateTranslation", this.Model, null)
在这种情况下,mvc将尝试为您的链接传递正确的序列化模型值,如果您的模型足够简单,CreateTranslations将正确获取其模型。但是,我不这样做。生成的链接是静态的。如果用户在客户端更改Snippet值,该怎么办?在添加翻译时,所有更改的表单值都将丢失(链接将传递初始的,服务器生成的值)。所以,你应该尝试以下之一
答案 1 :(得分:0)
我没有得到你的正确但如果你想通过“创建”控制器添加数据,那么你不需要在“oSnippeteditviewmodel”中指定对象。您可以通过
获取所有表单数据Request.Form [“controlName”]
并按上面填写Snippeteditviewmodel数据成员并保存。