Sitecore MVC多步表单

时间:2015-02-23 08:47:53

标签: model-view-controller sitecore sitecore-mvc

我正在使用sitecore和mvc开发多步骤表单。在每个步骤中我都需要sitecore上下文,我正在使用控制器渲染。现在作为sitecore工作,我需要为我的渲染添加控制器名称和操作,所以基本上我只能为每个渲染使用一个控制器操作。

在我的情况下,我在多步骤表单中为每个步骤使用了相同的操作名称但不同的参数类型。理想情况下,我希望在多步骤表单中为每个步骤设置不同的控制器操作名称。谁能帮帮我呢?

由于

2 个答案:

答案 0 :(得分:1)

我不确定我完全理解这个问题。您是否尝试使用单个.cshtml文件进行所有步骤?如果是这样,您可以为Sitecore CMS中的同一视图定义多个控制器渲染。在渲染部分中,将多步骤表单的每个步骤定义为单独的控制器渲染。您可以为每个控制器使用相同的控制器,但指定不同的操作。

在控制器逻辑中,您可以指定返回相同的View,但将不同的属性传递给Model对象。

例如,你可能会这样做:

public ActionResult Step2(){
   var context = RenderingContext.Current.PageContext.Item;
   var otherParams = "SomethingForStep2";
   var model = new MyModelObject(context, otherParams);
   var view = this.View("Path/To/My/View", model);

   return view;
}

在上面的示例中,我假设您已经定义了某种Model对象,您可以在其中传入所需的任何参数,以便您的视图可以使用它来呈现。

如果您使用不同的视图,那么您将只为每个操作返回一个不同的视图,再次将模型传递给视图以帮助它呈现。

答案 1 :(得分:0)

如果您使用的是AJAX(我会假设),我建议您使用以下内容:

  1. 使用控制器中的唯一HttpGet操作提供多步骤表单的每个视图/步骤
  2. 使用唯一项和唯一视图表示表单的每个视图/步骤(将视图分配给项并使用空布局以使表单/视图自行呈现)
  3. 使用控制器中的唯一HttpPost操作处理每个表单的后期操作
  4. 从HttpPost操作中,返回一个可以在客户端处理的JSON对象。在此结果中包含属性,例如成功,失败,验证错误以及要显示的表单的下一步(以下AJAX请求的URL - 调用此属性NextStepUrl
  5. 在客户端,JavaScript有一个函数来处理控制器的POST操作返回的JSON结果对象。如果成功读取NextStepUrl属性,则使用此属性为表单的下一步执行AJAX GET请求
  6. 这种方法意味着在每个GET请求中,您将拥有一个有效的RenderingContext,可以从中读取控制器渲染的数据源。

    如果你需要在HttpPost动作期间拥有RenderingContext,你可以简单地包含一个带有数据源项ID的隐藏字段,并在HttpPost动作中读取它,或者你可以使用一些custom model binding来实现相同的功能事情稍微清洁一点。