2013-04-19 3 views
0

У меня есть приложение MVC, которое при нажатии ссылки на страницу должно отображаться на основе тех же значений на другой странице. Я не могу понять, почему передается значение null вместо строки. Мой код ниже.Значение не передается должным образом контроллеру из вида

Контроллер:

public string searchQ 
    { 
     get { return (string)Session["searchQ"]; } 
     set { Session["searchQ"] = value; } 
    } 

    public ActionResult Index() 
    { 
     Session["InitialLoad"] = "Yes"; 
     return View(); 
    } 


    [HttpPost] 
    public ActionResult Index(string heatSearch) 
    { 
     ViewBag.SearchKey = heatSearch; 
     searchQ = heatSearch; 
     return View(); 
    } 


    public ActionResult Index_Perm() 
    { 
     ViewBag.SearchKey = searchQ; 

     return View(); 
    } 






    public ActionResult PartialMainLim(string heatSearch) 
    { 
     HomeModel C = new HomeModel(); 
     ChemViewModel D = new ChemViewModel(); 
     D = C.QueryResults(heatSearch); 

     return PartialView(D); 
    } 


    public ActionResult PartialMain(string heatSearch) 
    { 
     HomeModel C = new HomeModel(); 
     ChemViewModel D = new ChemViewModel(); 
     D = C.QueryResults(heatSearch); 

     return PartialView(D); 
    } 

Код в индексном выглядит следующим образом (это работает):

@if (ViewBag.SearchKey != null) 
{ 
    <div> 
    @Html.Action("PartialMainLim", "Home", (string)ViewBag.SearchKey) 
    </div> 
} 

И по мнению index_perm:

@if(ViewBag.SearchKey != null) 
{ 
    <div> 
    @Html.Action("PartialMain", "Home", (string)ViewBag.SearchKey) 
    </div> 
} 

Когда я проверьте значение SearchKey в обоих представлениях правильно. Однако для метода «PartialMain» значение null передается вместо строки, несмотря на правильность SearchKey. Однако все это работает для другого взгляда. Что я делаю не так?

ответ

2

При переходе значения обратно в контроллер у вас есть два основных варианта:

  1. сделать форму

  2. передать его как часть url

Получить методы принимают атрибуты url, тогда как методы Post также могут обрабатывать содержимое формы.

Из того, что вы пытаетесь сделать, я бы сказал, что вы могли бы использовать что-то вроде:

@Html.Action("PartialMain", "Home", new {heatSearch = (string)ViewBag.SearchKey}) 

это должно создать URL выглядит как/Home/PartialMain heatSearch = [содержание] SearchKey

? EDIT:

Это передаст только значение, указанное в ViewBag. Вы получаете его из Сессии, что является imho ужасной идеей в MVC (которая должна быть без сеанса). Пожалуйста, подумайте, действительно ли это вам нужно. Обычно существуют другие способы реализации этого.

0

В контроллере нет обработчика HttpPost, когда вы нажимаете на представление index_perm.

+0

Когда я добавляю [HttpPost] к этому методу, он говорит, что его невозможно найти. –

+0

Вам понадобятся методы HttpGet и HttpPost, аналогичные тому, как вы реализовали для индекса – aquaraga

0

Я думаю, что проблема заключается в вашей сессии, которая была бы нулевой. Одним из принципов структуры ASP.NET MVC является апатрид. Использование сеанса в ASP.NET MVC довольно ужасно.

На данный момент, я думаю, вы можете быстро его исправить, используя TempData, который по умолчанию использует Session под капотом. Вы можете посмотреть устаревшую статью для дальнейшего выкапывания ViewData vs TempData

+0

Итак, что было бы лучшим способом сделать это? Кажется, что это значение просто отлично, пока ему не нужно вернуться к контроллеру. –