我有一个带有数据的对象视图和该视图上的按钮。用户可以查看对象信息并单击按钮以转到新的视图表单,以便他可以输入信息以创建项目。我的挑战是,我如何在上一个视图中附加对象的ID以将其关联并附加到他们创建和提交的信息上?
答案 0 :(得分:1)
@Html.ActionLink("Add","AddNotes","Object",new {@id=5},null)
这将创建一个包含查询字符串?id=5
的标记。 (您可以将硬编码的5替换为视图中的动态值)
拥有一个属性,以便为创建表单的ViewModel/Model
保留此值。
public class CreateNoteViewModel
{
public int ParentId { set;get;}
public string Note { set;get;}
//Other properties also
}
在您的GET action
方法中阅读此内容,该方法会创建第二个视图并设置ViewModel / Model的该属性的值。
public ActionResult AddNotes(int id)
{
var model=new CreateNoteViewModel();
model.ParentId=id;
return View(model);
}
在强类型视图中,将此值保留在隐藏变量中。
@model CreateNoteViewModel
@using(Html.BeginForm())
{
@Html.TextBoxFor(Model.Note)
@Html.HiddenFor(Model.ParentId)
<input type="submit" />
}
现在,在您的HttpPost
操作中,您可以从POSTED模型的ParentId属性中获取对象ID
[HttpPost]
public ActionResult AddNotes(CreateNoteViewModel model)
{
if(ModelState.IsValid()
{
//check for model.ParentId here
// Save and redirect
}
return View(model);
}
答案 1 :(得分:0)
你可以使用隐藏的输入&amp; viewdata,PSEUDOCODE。 注意 您可能必须使用包含查看数据的字符串并转换回控制器中的ID。有关ViewData / ViewBag(和缺点)的基本说明,请参阅this link。
您需要将数据从第一个操作传递到视图(Controller) Controller基类具有“ViewData”字典属性,可用于填充要传递给View的数据。您可以使用键/值模式将对象添加到ViewData字典中。
控制器
public ActionResult yourfirstaction()
{
//assign and pass the key/value to the view using viewdata
ViewData["somethingid"] = ActualPropertyId;
在视图中 - 获取值将其与隐藏输入一起使用以传递回下一个控制器以呈现下一个视图
<input type="hidden" name="somethingid" value='@ViewData["somethingid"]' id="somethingid" />
控制器
public ActionResult yournextaction(string somethingid)
{
//use the id
int ActualPropertyId = Convert.ToInt32(somethingid);