Asp.net mvc 如何将完整的viewmodel提交到其他视图?
我正在使用MVC3(razor),我正在努力使以下各项正常工作 我有一个片段列表。这些代码段具有一些常规设置,然后具有未知语言量的翻译 现在我试着做以下几点: 在代码段的“创建”页面(url:)上,我设置了常规设置。下面是一个已填写的翻译列表(开头为空)。当您按下“Opslan”按钮时,我希望表单保存常规设置和翻译列表 当我按下“添加”按钮时,我想将完整的viewmodel(设置+翻译列表)提交到另一个页面,在那里我可以填写翻译。填写翻译后,我想返回此页面(url:)。在这里,列表中填写了翻译 现在我做错了,因为我无法让viewmodel提交到第2页 这是我的代码: 按钮“添加翻译”: 代码段控制器:Asp.net mvc 如何将完整的viewmodel提交到其他视图?,asp.net-mvc,submit,viewmodel,Asp.net Mvc,Submit,Viewmodel,我正在使用MVC3(razor),我正在努力使以下各项正常工作 我有一个片段列表。这些代码段具有一些常规设置,然后具有未知语言量的翻译 现在我试着做以下几点: 在代码段的“创建”页面(url:)上,我设置了常规设置。下面是一个已填写的翻译列表(开头为空)。当您按下“Opslan”按钮时,我希望表单保存常规设置和翻译列表 当我按下“添加”按钮时,我想将完整的viewmodel(设置+翻译列表)提交到另一个页面,在那里我可以填写翻译。填写翻译后,我想返回此页面(url:)。在这里,列表中填写了翻译
public ActionResult Create()
{
SnippetEditViewModel oItem=新的SnippetEditViewModel();
oItem.lSnippetsPerLanguage=新列表();
返回视图(oItem);
}
[HttpPost]
公共操作结果创建(SnippetEditViewModel SnippetEditViewModel)
{
if(ModelState.IsValid)
{
Snippeteditviewmodel.Bookmark=Snippeteditviewmodel.Bookmark.Replace('''.'');
_reposippet.CreateSnippet(Snippeteditviewmodel);
返回操作(“索引”);
}
返回视图(视图模型);
}
公共操作结果CreateTransformation(SnippetEditViewModel oSnippeteditviewmodel)
{
返回视图(oSnippeteditviewmodel);
}
在控制器中,对象“oSnippeteditviewmodel”保持为空
有谁有类似的问题?或者解决方案?我没有正确地理解您,但是如果您想通过“创建”控制器添加数据,则不需要在“oSnippeteditviewmodel”中指定对象。您可以通过以下方式获取所有表单数据: 申请表格[“controlName”]
然后按上面的方法填充Snippeteditviewmodel数据成员并保存它。首先,您应该尝试像这样生成操作链接
@Html.ActionLink("Add", "CreateTranslation", this.Model, null)
在这种情况下,mvc将尝试为链接传递正确的序列化模型值,如果您的模型足够简单,CreateTransformations将正确获取其模型。但是,我不会那样做。生成的链接是静态的。如果用户更改客户端的代码段值,该怎么办?在添加翻译时,所有更改的表单值都将丢失(链接将传递初始的、服务器生成的值)。因此,您应该尝试以下方法之一
向我们展示@Html.ActionLink生成的链接这是url:我调整了第一篇帖子,现在可能更容易理解:)你可以通过“ID”发送链接对象在其他页面上获取“翻译”,并通过ID从其他表单获取翻译数据。
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);
}
@Html.ActionLink("Add", "CreateTranslation", this.Model, null)