为什么 Sitefinity 小部件考虑 URL 路径

问题描述 投票:0回答:1

我创建了一个像这样的

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错误。 /这是在我创建
Test
页面之前。正如预期的那样。
/
3. /主页/测试 测试页面的内容。 /这是我创建
Test
页面之后的结果。正如所料
/
4. /主页/测试/测试 这是测试。

对于#4,似乎 URL 中的最后一个片段被视为控制器方法。但不知何故,同样的逻辑并不适用于#2。

我很困惑为什么小部件考虑 URL 来检查后端方法。我原以为默认情况下它只是每个小部件的

Index
方法。但如果这是默认行为,我们如何知道系统是否正在寻找页面或控制器方法(如果它们相同)。

使用

Sitefinity 14.1

sitefinity
1个回答
0
投票

您是否从主页的“标题”和“属性”中取消选中“允许参数验证”属性? 通常,如果选中了复选框,#2 也应该有效。

要使#2起作用(无需在主页下创建测试页面),您可以尝试在测试操作的开头添加此行:

public ActionResult Test() { RouteHelper.SetUrlParametersResolved(true); return View("Test", model); }

它告诉 Sitefinity 路由 - 嘿,我可以处理这个请求,不要抛出 404。

© www.soinside.com 2019 - 2024. All rights reserved.