【问题标题】:Route/view binding issue with MVC3/RazorMVC3/Razor 的路由/视图绑定问题
【发布时间】:2011-06-14 03:45:21
【问题描述】:

在我的 MVC3 应用程序中,我有一个动作可以根据所选对象路由到自定义动作。

    public ActionResult SearchCityState(string city, string state, string searchTerm)
    {
        city = Server.HtmlEncode(city);
        state = Server.HtmlEncode(state);
        searchTerm = Server.HtmlEncode(searchTerm);

        // now build the search object
        ...

        return DoSearch(sourceRequestObject);
    }


    public ActionResult SearchState(string state, string searchTerm)
    {
        state = Server.HtmlEncode(state);
        searchTerm = Server.HtmlEncode(searchTerm);

        // now build the search object
        ...

        return DoSearch(sourceRequestObject);
    }

这两个方法在填充对象和调用类中的以下 DoSearch() 方法方面做了一些工作,并根据一些逻辑进行选择:

public ActionResult DoSearch(FeederService.SearchRequestObject sourceRequestObject)
{
    ...

    var model = new MyAppMVC.Models.ResultsModel();
    var page = model.GetData(sourceRequestObject);

    return View(page);
}

这是我的模型类:

public class ResultsPage
{
    public DataSet dsResults { get; set; }

    public Int32 actualNumberOfResults { get; set; }
    public int numberOfResultsReturned { get; set; }
}

public class ResultsModel
{
    ...

    public ResultsPage GetData(FeederService.SearchRequestObject sourceRequestObject)
    {
        var page = new ResultsPage();

        ...

        page.dsResults = myWcfFeederClient.GetData(sourceRequestObject);

        if (page.dsResults != null)
        {
            page.actualNumberOfResults = Convert.ToInt32(page.dsResults.Tables[1].Rows[0]["ActualNumberOfResults"].ToString());
            page.numberOfResultsReturned = Convert.ToInt16(page.dsResults.Tables[1].Rows[0]["NumberOfResultsReturned"].ToString());
        }

        return page;
    }
}

我在 /Results/SearchResults.cshtml 中定义了一个视图,我想将所有请求路由到该视图,因为所有请求的输出都相同

问题是最初选择的动作名称是默认选择的视图。 IE。如果调用 SearchCityState(),会抛出如下异常:

视图“SearchCityState”或其 找不到主人或没有视图引擎 支持搜索的位置。这 搜索了以下位置:

~/Views/Results/SearchCityState.aspx ~/Views/Results/SearchCityState.ascx ~/Views/Shared/SearchCityState.aspx ~/Views/Shared/SearchCityState.ascx ~/Views/Results/SearchCityState.cshtml ~/Views/Results/SearchCityState.vbhtml ~/Views/Shared/SearchCityState.cshtml ~/Views/Shared/SearchCityState.vbhtml

... 和 SearchState() 类似。我对这个问题很熟悉,但我不记得如何将所有请求路由到那个视图。

谢谢。

更新

这是我定义的路线:

        routes.MapRoute(name: "CityHomePage", url: "{city}-{state}", defaults: new { controller = "Home", action = "GeoHomePage" });
        routes.MapRoute(name: "CityStateResults", url: "{city}-{state}/{searchTerm}", defaults: new { controller = "Results", action = "SearchCityState" });

...和关闭的链接定义为:

<a href="/City-State/">My CityState Link</a>

我最终遇到以下错误:

视图“SearchCityState”或其 找不到主人或没有视图引擎 支持搜索的位置。这 搜索了以下位置: ~/Views/Results/SearchCityState.aspx ~/Views/Results/SearchCityState.ascx ~/Views/Shared/SearchCityState.aspx ~/Views/Shared/SearchCityState.ascx ~/Views/Results/SearchCityState.cshtml ~/Views/Results/SearchCityState.vbhtml ~/Views/Shared/SearchCityState.cshtml ~/Views/Shared/SearchCityState.vbhtml

【问题讨论】:

  • 所以只是为了确认一下,您想为每个请求显示到相同的基本 CSHTML 页面吗?来自您的 DoSearch 方法?
  • 是的,没错。控制器逻辑将始终以相同格式将数据返回到强类型视图(使用 ResultsPage)。

标签: c# asp.net-mvc-3 routing


【解决方案1】:

使用View()方法的另一个重载,它将视图名称作为第一个参数:

public ActionResult DoSearch(FeederService.SearchRequestObject sourceRequestObject)
{
    ...

    var model = new MyAppMVC.Models.ResultsModel();
    var page = model.GetData(sourceRequestObject);

    return View("SearchResults", page);
}

MSDN article 没有帮助,但答案感觉不完整)

【讨论】:

  • 做到了,谢谢。但是,对于抱怨该操作的链接,我仍然遇到该问题(请参阅上面的“更新”)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多