我创建了一个像这样的
Widget
:
[ControllerToolboxItem(Name = "MyFirstWidget", Title = "My First Widget", SectionName = "Custom")]
public class MyFirstWidgetController : Controller, IPersonalizable
{
public ActionResult Index()
{
var model = new MyFirstWidgetModel();
model.Message = this.Message;
return View("Index", model);
}
public ActionResult Test()
{
return View("Test", model);
}
public string Message { get; set; }
}
索引.cshtml
@model Learn_SF.Mvc.Models.MyFirstWidgetModel
<div>
@Model.Message
</div>
测试.cshtml
<div>
This is test
</div>
将此添加到 2 页 -
Home
和 Test
。 Test
页面位于 Home
下方。然后分配相应的 Message
值“主页内容”和“测试页面内容”,
网址 | 显示内容 |
---|---|
1. /主页 | 主页内容。 /正如所料/ |
2. /主页/测试 | 404错误。 /这是在我创建 页面之前。正如预期的那样。/ |
3. /主页/测试 | 测试页面的内容。 /这是我创建 页面之后的结果。正如所料/ |
4. /主页/测试/测试 | 这是测试。 |
对于#4,似乎 URL 中的最后一个片段被视为控制器方法。但不知何故,同样的逻辑并不适用于#2。
我很困惑为什么小部件考虑 URL 来检查后端方法。我原以为默认情况下它只是每个小部件的
Index
方法。但如果这是默认行为,我们如何知道系统是否正在寻找页面或控制器方法(如果它们相同)。
使用
Sitefinity 14.1
。
您是否从主页的“标题”和“属性”中取消选中“允许参数验证”属性? 通常,如果选中了复选框,#2 也应该有效。
要使#2起作用(无需在主页下创建测试页面),您可以尝试在测试操作的开头添加此行:
public ActionResult Test()
{
RouteHelper.SetUrlParametersResolved(true);
return View("Test", model);
}
它告诉 Sitefinity 路由 - 嘿,我可以处理这个请求,不要抛出 404。