Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在MVC中在视图之间传递数据_Asp.net Mvc 3_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 3 在MVC中在视图之间传递数据

Asp.net mvc 3 在MVC中在视图之间传递数据,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc 3,Asp.net Mvc Routing,我目前正在编写一个web应用程序,它需要将一些配置设置从设置页面传递到带有搜索框的页面 当前,我正在使用以下命令将配置数据从设置页面传递到主页: public ActionResult Settings(Configuration configuration) { return RedirectToAction("ConfigSet", "Home", configuration); } 在家庭控制器中: public ActionResult ConfigSet(Configurat

我目前正在编写一个web应用程序,它需要将一些配置设置从设置页面传递到带有搜索框的页面

当前,我正在使用以下命令将配置数据从设置页面传递到主页:

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);
    }
public PartialViewResult搜索(字符串q)
{
列表结果=此。搜索(q);
返回PartialView(“搜索结果”,结果);
}
在局部视图呈现为这样的情况下:

@using (Ajax.BeginForm("Search", "Home", new AjaxOptions {
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "searchResults",
}))
{
    <input type="text" name="searchString" />
    <input type="submit" value="Search" />
}
@使用(Ajax.BeginForm(“搜索”、“主页”、新的AjaxOptions{
HttpMethod=“GET”,
InsertionMode=InsertionMode.Replace,
UpdateTargetId=“searchResults”,
}))
{
}

我的问题是如何将配置设置传递给局部视图?我已经考虑了几天了,对此我真的很困惑。

您可以创建一个viewModel,它会像这样存储您的配置设置

public class MyViewModel
{
   public Configuration configuration {get;set;}
   public List<Stuff> results {get;set;} 
}
如果您再次希望将配置传递给控制器,则

@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" /> 
} 
@使用(Ajax.BeginForm(“搜索”,“主页”,新{config=Model.configuration}新AjaxOptions{HttpMethod=“GET”,InsertionMode=InsertionMode.Replace,UpdateTargetId=“searchResults”,}))
{     
} 

您的意思是要在服务器上的搜索操作方法中获取配置设置吗?要干净地执行此操作,您必须将它们往返于客户端,这似乎不合逻辑,而且可能不安全(取决于配置中的内容),或者您需要在搜索操作本身中再次检索它们。

谢谢。但是,我不确定如何将设置页面上设置的配置传递给SearchViewResult方法。我可以通过configset方法将数据传递到母版页,但无法使用您的想法将配置传递到搜索方法;在ajax request submit(将调用搜索操作)上,您必须将签名更改为
public PartialViewResult search(配置配置)
更新了答案,请看一看抱歉,我仍然不明白。请你详细说明一下好吗?我认为这样不行。对不起:用户第一次进入主页(调用搜索方法)时,没有设置新的{config=Model.configuration}。配置设置是由用户在视图中设置的。然后它们将返回主页(我为两个视图提供了单独的控制器)。如果从HomeController调用this.search方法,如何将配置设置发送到search类?是否将用户设置持久化到数据库?如果不是,您实际上只是在谈论会话设置,在这种情况下,您需要使用服务器的会话对象本身,或者将它们存储在cookie中,或者在每个视图的ViewModel上,都有一个名为UserSettings的公共属性,它是一个字符串,您可以序列化和反序列化每个请求。如果您选择后者,请使用BaseViewModel来完成这项工作。
@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" /> 
}