MVC3 - 用于创建模型数据并与来自另一个表/模型的Guid相关联的控制器方法

时间:2012-06-24 05:22:23

标签: asp.net-mvc-3 model controller-action

我有2个模型,每个模型都有许多属性 - Object1和Object2

我在SQL db中与它们有外键关系 - Object1可以有很多Object2的

在我的Object2Controller的Create()方法中创建Object2时,如何将Object2与Object 1的Guid相关联?

这是代码:

控制器:

    [HttpPost]
public ActionResult Create(Object2 object2)
    {
        if (ModelState.IsValid)
        {
            object2.Object2Id = Guid.NewGuid();
            db.Object2.Add(object2);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }
        return View(object2);
    }

1 个答案:

答案 0 :(得分:1)

在这种情况下,我只能看到两个选项:

  1. 当您从视图中回发时,预先填充模型中的 Object1 GUID,就像其他属性一样。这可以通过不同的方式完成,具体取决于您的要求(用户选择的下拉列表,预先填充到隐藏字段等)。
  2. 跟踪当前用户正在使用 Object1 的服务器。您可以使用 Session 对象,甚至使用 TempData 来执行此操作。
  3. 修改

    要从 Object1 详细信息视图中创建新的 Object2 ,请按照此流程进行操作。

    首先,详细视图上的一个简单表单:

    @using (var form = Html.BeginForm("Add", "Object2Controller", FormMethod.Get)) 
    { 
        <input type='hidden' name='Object1ID' value='@Model.Object1ID' />
        <submit type='submit' value='Add Object1' />
    }
    

    然后,您将在 Object2 的控制器中有一个 Add 方法,用于预先填充外键:

    [HttpGet]
    public ActionResult Add(Guid Object1ID)
    {
        Object2 newObj = new Object2();
        newObj.Object1ID = Object1ID;
        return View("MyAddView", newObj);
    }
    

    这将指向 Object2 详细信息表单,该表单会回复您问题中的 Create 方法。