Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何使用razor作为用户控件_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc 3 如何使用razor作为用户控件

Asp.net mvc 3 如何使用razor作为用户控件,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,示例场景: 假设我需要创建一个用户控件,它显示指定类别的产品列表(CategoryID作为输入传递给Index GET controller) 此外,它在列表下方有一个“添加”按钮,该按钮调用类别详细信息(GET)控制器(将categoryID传递给控制器),该控制器显示一个带有文本框和按钮的表单,用于添加新类别 一旦用户输入类别详细信息并按提交,将调用详细信息(POST)控制器,该控制器将保存数据,并将用户重定向回调用它的页面 此用户控件(razor文件)可以在同一页面上多次使用 查询 1)

示例场景:

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

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

一旦用户输入类别详细信息并按提交,将调用详细信息(POST)控制器,该控制器将保存数据,并将用户重定向回调用它的页面

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

查询

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

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


谢谢

您要查找的是局部视图,即编辑器模板

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


然后在主视图上调用
EditorFor

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

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


不确定重定向到returnUrl是否是最好的方法,但它解决了我的问题。在我的ViewModel中,我添加了一个returnURL属性,在显示表单时将其设置为urlRefrer.ToString(),而在执行httpPost时使用该值重定向。谢谢
[HttpPost]
public PartialViewResult AddProduct(string productId,string returnUrl)
{
  //Add product

return Redirect(returnUrl);
}