如何使用剃刀作为用户控件

时间:2012-02-25 15:41:39

标签: asp.net-mvc-3 razor

示例场景:

假设我需要创建一个用户控件,该控件显示指定类别的产品列表(作为Index GET控制器的输入传递的CategoryID)。

此外,它在列表下方有一个“添加”按钮,它调用类别详细信息(GET)控制器(将categoryID传递给控制器​​)​​,该按钮显示带有文本框和按钮的表单以添加新类别。

用户输入类别详细信息并按提交后,将调用详细信息(POST)控制器以保存数据,并应将用户重定向到调用它的页面。

此用户控件(剃刀文件)可以在同一页面上多次使用。

查询

1)在页面视图中集成此类控件的最佳方法是什么,这样每个用户控件中的表单都是自包含的,并且不会与同一页面中同一用户控件的其他实例冲突?

2)我试过Html.RenderAction("Index","Category",new {categoryName = "toys"}) 这在显示类别时效果很好,单击“添加”按钮会使用户进入“添加新类别”页面。问题是,我应该编写什么代码,以便我可以将用户带回到嵌入了用户控件的同一个视图页面(如果我可以将窗口滚动到放置控件的位置,那就更好了)?

谢谢!

2 个答案:

答案 0 :(得分:0)

您正在寻找的是局部视图,即编辑器模板。

在Views文件夹中,创建一个Shared文件夹,在其中创建一个EditorTemplates文件夹。从那里创建一个强类型的局部视图,名称与模型的部分相同。

然后在主视图中调用EditorFor

答案 1 :(得分:0)

当数据在部分视图中发布到相应的Action时,它没有主视图/操作的上下文。因此,我们可以将数据发布到主操作,以便保留模型状态并进行验证。

但是如果你想将数据发布到部分视图/动作,我们可以重定向到主视图/动作后添加产品。(但如果输入了一些无效数据,我们就无法显示任何验证错误)

[HttpPost]
public PartialViewResult AddProduct(string productId,string returnUrl)
{
  //Add product

return Redirect(returnUrl);
}