1

我有一个带有数据的对象视图和该视图上的一个按钮。用户可以查看对象信息并单击按钮转到新的视图表单,此时他可以输入信息来创建项目。我的挑战是,我将如何在前一个视图上附加对象的 ID 以将其关联并附加到他们创建和提交的信息?

4

2 回答 2

1
@Html.ActionLink("Add","AddNotes","Object",new {@id=5},null)

这将创建一个带有 querystring 的标签?id=5。(您可以将硬编码的 5 替换为您视图中的动态值)

有一个属性可以为您ViewModel/Model的创建表单保留此值。

public class CreateNoteViewModel
{
  public int ParentId { set;get;}
  public string Note { set;get;}
  //Other properties also
}

在创建第二个视图的 GETaction方法中阅读此内容并设置 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); 
}
于 2012-07-02T18:32:13.857 回答
0

您可以使用隐藏的输入和视图数据,PSEUDOCODE。 注意您可能必须使用带有视图数据的字符串并在控制器中转换回您的 id。有关 ViewData/ViewBag(和缺点)的基本说明,请参阅此链接

您需要将数据从第一个操作(控制器)传递到视图。控制器基类有一个“ViewData”字典属性,可用于填充要传递到视图的数据。您可以使用键/值模式将对象添加到 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);
于 2012-07-02T04:51:53.593 回答