2012-04-23 3 views
1

В настоящее время я пишу веб-приложение, которому необходимо передать некоторые параметры конфигурации со страницы настроек на страницу страницы с полем поиска.Передача данных между представлениями в MVC

В настоящее время я прохожу конфигурационные данные на странице настроек на главную страницу с:

public ActionResult Settings(Configuration configuration) 
{ 
    return RedirectToAction("ConfigSet", "Home", configuration); 
} 

И в доме контроллера:

public ActionResult ConfigSet(Configuration configuration) 
{    
    return View("Index"); 
} 

Я генерируя частичный вид с :

public PartialViewResult Search(string q) 
    { 
     List<Stuff> results = this.Search(q); 
     return PartialView("SearchResults", results); 
    } 

с частичным видом оказанной таким образом:

@using (Ajax.BeginForm("Search", "Home", new AjaxOptions { 
HttpMethod = "GET", 
InsertionMode = InsertionMode.Replace, 
UpdateTargetId = "searchResults", 
})) 
{ 
    <input type="text" name="searchString" /> 
    <input type="submit" value="Search" /> 
} 

Вопрос в том, как передать параметры конфигурации в частичный вид? Я подумывал об этом несколько дней и действительно смущен.

ответ

2

Вы можете создать ViewModel, который будет хранить настройки вашей конфигурации, как этот

public class MyViewModel 
{ 
    public Configuration configuration {get;set;} 
    public List<Stuff> results {get;set;} 
} 

& в вашем действии обратного MyViewModel

public PartialViewResult Search(Configuration config)  
{ 
    var model = new MyViewModel(); 
    //set its properties  
    model.results = this.Search(q);  
    model.configuration = configurationObject;  
    return PartialView("SearchResults", model);  
} 

если вы снова хотите передать конфигурацию в контроллер затем

@using (Ajax.BeginForm("Search", "Home", new { config = Model.configuration } new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResults", })) 
{  
    <input type="text" name="searchString" />  
    <input type="submit" value="Search" /> 
} 
+0

спасибо. Однако я не уверен, как передать конфигурацию, установленную на странице настроек, методу поиска viewresult. Я могу передать данные на главную страницу с помощью метода configset, но не могу получить конфигурацию метода поиска, используя вашу идею. –

+0

В вашем ajax.beginform вы можете отобразить все свои материалы конфигурации из model.configuration; На запрос ajax submit, который будет вызывать действие поиска, для этого вам придется изменить подпись на 'public PartialViewResult Search (конфигурационный конфиг)' –

+0

Обновлен ответ, посмотрите –

0

Вы хотите, чтобы получить конфигурацию иона в методе поиска на сервере? Чтобы сделать это чисто, вы либо должны округлить их к клиенту и обратно, что кажется нелогичным и, возможно, небезопасным (в зависимости от того, что находится в вашем конфиге), или вам нужно вернуть их снова в самом действии поиска.

+0

Настройки конфигурации задаются пользователем в виде. Затем они вернутся на главную страницу (у меня есть отдельные контроллеры для обоих видов). Как отправить параметры конфигурации в класс поиска, учитывая, что метод this.search вызывается из HomeController? –

+0

Вы не сохраняете настройки пользователя в базе данных? Если нет, вы действительно говорите о наличии только настроек сеанса, и в этом случае вам нужно использовать сам объект сеанса сервера или хранить их в файле cookie или в ViewModel для каждого представления, иметь общее свойство UserSettings, которое является строка, которую вы сериализуете и десериализуете каждый запрос. Если вы делаете последнее, у вас есть BaseViewModel, который выполняет эту работу за вас. –

Смежные вопросы