MVC 4使用从视图传递到控制器的数据创建模型

时间:2013-06-18 19:17:32

标签: asp.net-mvc asp.net-mvc-4

我是MVC的新手,我有一个相对基本的问题。我通过搜索找到了一些答案,但没有任何结果让我觉得我知道这个常用功能的“最佳实践”:

我有强烈打字的观点,我和'会员'和'宠物'之间有关系。我希望会员编辑视图中的页面为“创建新宠物”。

此时,我想将memberId从Member编辑视图传递给Pet create页面,这样它就可以启动Pet模型的新实例并使用正确的成员关联。

我认为最佳做法是从成员编辑视图传递memberId(但是通过什么方法?)然后将此值存储在隐藏表单字段中,该字段是强类型“memberId”值的正确名称在宠物模型上。然后,Pet创建控制器应该在创建Pet时自动提取该值。

我需要帮助将memberId从Member编辑视图传递到Pet edit视图,如果这是完成我想要做的事情的最佳方法,也需要一般的想法。感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:1)

因此,我在处理此类问题时看到的首选方式是使用MVVM模式,您可以在其中创建专门为视图设计的ViewModel对象。虽然这看起来像,但我有很多意见!但那可能是你需要切换到动态视图的时候。但是,如果你不能这种模式是一个很好的遵循它。例如,您需要会员ID和我相信的宠物信息吗?你可以做的是传递一个包含宠物列表的对象,或类似的东西。然后在视图模型中,您还会传递成员ID列表或成员ID。关于申请,我不太清楚。但最重要的是,您要创建一个特定于该视图的模型,该模型还使用实际模型来传递必要的信息。这个链接很好地描述了它。 http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx

祝你好运。

答案 1 :(得分:1)

直接的方法是将memberId作为路由值传递给CreatePet Action。

因此,您的会员视图可能具有如下所示的Url,以导航到CreatePet操作:

@Url.Action("CreatePet", "PetController", new { memberId = Model.MemberId })

CreatePet操作将memberId作为参数

public ActionResult CreatePet(int memberId)
{
    ...
}

<强>更新

从评论到问题:

  

如果我可以在“添加宠物”按钮中传递整个会员模型并在宠物控制器中使用它,我也很好奇?这可能是更好的方法

出于多种原因,这听起来不是一个好主意。为什么宠物需要了解会员这么多?如果客户端欺骗了会员值,那么你不应该依赖它们,那么最好只使用作为路由值传递的id来查找成员服务器端。