示例场景:
假设我需要创建一个用户控件,该控件显示指定类别的产品列表(作为Index GET控制器的输入传递的CategoryID)。
此外,它在列表下方有一个“添加”按钮,它调用类别详细信息(GET)控制器(将categoryID传递给控制器),该按钮显示带有文本框和按钮的表单以添加新类别。
用户输入类别详细信息并按提交后,将调用详细信息(POST)控制器以保存数据,并应将用户重定向到调用它的页面。
此用户控件(剃刀文件)可以在同一页面上多次使用。
查询
1)在页面视图中集成此类控件的最佳方法是什么,这样每个用户控件中的表单都是自包含的,并且不会与同一页面中同一用户控件的其他实例冲突?
2)我试过Html.RenderAction("Index","Category",new {categoryName = "toys"})
这在显示类别时效果很好,单击“添加”按钮会使用户进入“添加新类别”页面。问题是,我应该编写什么代码,以便我可以将用户带回到嵌入了用户控件的同一个视图页面(如果我可以将窗口滚动到放置控件的位置,那就更好了)?
谢谢!
答案 0 :(得分:0)
您正在寻找的是局部视图,即编辑器模板。
在Views文件夹中,创建一个Shared文件夹,在其中创建一个EditorTemplates文件夹。从那里创建一个强类型的局部视图,名称与模型的部分相同。
然后在主视图中调用EditorFor
。
答案 1 :(得分:0)
当数据在部分视图中发布到相应的Action时,它没有主视图/操作的上下文。因此,我们可以将数据发布到主操作,以便保留模型状态并进行验证。
但是如果你想将数据发布到部分视图/动作,我们可以重定向到主视图/动作后添加产品。(但如果输入了一些无效数据,我们就无法显示任何验证错误)
[HttpPost]
public PartialViewResult AddProduct(string productId,string returnUrl)
{
//Add product
return Redirect(returnUrl);
}