Проблема привязки маршрута / вида с помощью MVC3 / Razor - PullRequest
0 голосов
/ 14 июня 2011

В моем приложении 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, котороеЯ хочу направить все запросы к, поскольку выходные данные будут одинаковыми для всех

Проблема заключается в том, что изначально выбранное имя действия является выбранным видом по умолчанию.то есть.если вызывается 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

1 Ответ

1 голос
/ 14 июня 2011

Используйте другую перегрузку метода View(), которая принимает имя представления в качестве 1-го параметра:

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

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

    return View("SearchResults", page);
}

( статья MSDN бесполезна, но ответ не кажется полным)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...