Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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 如何与Json一起访问ViewBag_Asp.net Mvc_Asp.net Mvc 3_Asp.net Core_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 如何与Json一起访问ViewBag

Asp.net mvc 如何与Json一起访问ViewBag,asp.net-mvc,asp.net-mvc-3,asp.net-core,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 3,Asp.net Core,Asp.net Mvc 5,我在Json和Linq的帮助下通过返回数据库值来实现自动完成功能。我需要实现编辑功能。对于编辑功能,我需要将viewBag数据返回到我的视图。但在返回Json结果时,我无法访问我的viewBag public JsonResult Index(string Prefix,int id = 0) { SqlConnection sqcon2 = new SqlConnection(conn); SqlCommand c

我在Json和Linq的帮助下通过返回数据库值来实现自动完成功能。我需要实现编辑功能。对于编辑功能,我需要将viewBag数据返回到我的视图。但在返回Json结果时,我无法访问我的viewBag

        public JsonResult Index(string Prefix,int id = 0)
        {
            SqlConnection sqcon2 = new SqlConnection(conn);
            SqlCommand cmd2 = new SqlCommand();
            SqlDataAdapter sd2 = new SqlDataAdapter(cmd2);
            DataTable dt2 = new DataTable();
            cmd2.Connection = sqcon2;
            cmd2.CommandText = "sps_userLocationByID";
            cmd2.CommandType = System.Data.CommandType.StoredProcedure;
            cmd2.Parameters.AddWithValue("@id", id);
            sqcon2.Open();
            sd2.Fill(dt2);
            sqcon2.Close();
            foreach (DataRow dr2 in dt2.Rows)
            {
               ViewBag.cityName = dr2["CityName"].ToString();
                ViewBag.Name = dr2["Name"].ToString();
            }


            SqlConnection sqcon = new SqlConnection(conn);
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter sd = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            cmd.Connection = sqcon;
            cmd.CommandText = "sps_userCity";
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            sqcon.Open();
            sd.Fill(dt);
            sqcon.Close();
            List<CityModel> ObjList = new List<CityModel>();
            foreach (DataRow dr in dt.Rows)
            {
                CityModel st = new CityModel();

                st.CityName = dr["CityName"].ToString();

                ObjList.Add(st);
            }
                      var CityName = (from N in ObjList
                            where 
                            N.CityName.ToLower().StartsWith(Prefix.ToLower())
                            select new { N.CityName });
            return Json(CityName, JsonRequestBehavior.AllowGet);
}
公共JsonResult索引(字符串前缀,int-id=0) { SqlConnection sqcon2=新的SqlConnection(conn); SqlCommand cmd2=新的SqlCommand(); SqlDataAdapter sd2=新的SqlDataAdapter(cmd2); DataTable dt2=新的DataTable(); cmd2.Connection=sqcon2; cmd2.CommandText=“sps\U userLocationByID”; cmd2.CommandType=System.Data.CommandType.StoredProcess; cmd2.Parameters.AddWithValue(“@id”,id); sqcon2.Open(); sd2.填充(dt2); sqcon2.Close(); foreach(dt2.Rows中的数据行dr2) { ViewBag.cityName=dr2[“cityName”].ToString(); ViewBag.Name=dr2[“Name”].ToString(); } SqlConnection sqcon=新的SqlConnection(conn); SqlCommand cmd=新的SqlCommand(); SqlDataAdapter sd=新的SqlDataAdapter(cmd); DataTable dt=新的DataTable(); cmd.Connection=sqcon; cmd.CommandText=“sps_userCity”; cmd.CommandType=System.Data.CommandType.StoredProcess; sqcon.Open(); 标准差填充(dt); sqcon.Close(); 列表对象列表=新列表(); foreach(数据行dr在dt.行中) { CityModel st=新的CityModel(); st.CityName=dr[“CityName”].ToString(); 对象列表添加(st); } var CityName=(从对象列表中的N开始) 哪里 N.CityName.ToLower().StartsWith(前缀.ToLower()) 选择新的{N.CityName}); 返回Json(CityName,JsonRequestBehavior.AllowGet); }
ViewBag
仅存在于Razor视图的上下文中,只有当您返回
view()
PartialView()
等时,Razor视图本身才存在。如果您返回JSON,则仅此而已。您不能使用
ViewBag

也就是说,我认为你对事情是如何运作的总的来说是困惑的。最初,您的应用程序使用HTML文档进行响应。其他一切,如操作、视图等,都是关于获取最终可以返回到客户端(本例中为web浏览器)的HTML文档

一旦发送了响应。服务器完成了。在客户端,web浏览器解析文档并创建各种对象模型:DOM、CSSOM等。然后使用这些对象模型渲染页面(绘制)。在此过程中和之后,您的JavaScript将运行。所有这些都发生在客户端,服务器不知道也不关心;它已经完成了它的工作

然后,您需要从服务器获取一些新信息。这需要来自客户端的新请求,这将导致来自服务器的新响应。该请求可以是用户在浏览器中进行导航的形式(在这种情况下,整个浏览器窗口/选项卡视图将发生更改),也可以是AJAX请求的形式,即保持浏览器窗口/选项卡中的当前视图不变

XMLHttpRequest
,负责发出AJAX请求的实际JavaScript客户机类,被称为“瘦客户机”。它发出请求并接收响应,但它对所述响应不做任何操作,而与“厚客户端”相反,如web浏览器,它接收响应并进行所有对象模型的创建和渲染。相反,只调用回调函数。您有责任使用收到的响应在回调中执行某些操作(更新DOM等)


所有这些都意味着,在对AJAX请求返回JSON响应的同时使用
ViewBag
执行任何操作都毫无意义,因为视图没有改变。您似乎在想象更改
ViewBag
会以某种方式自动更新页面上先前通过
ViewBag
在初始Razor视图中添加的内容。事实并非如此,事情也并非如此。如果要更改页面上的某些内容,需要将新值作为AJAX请求的JSON响应的一部分返回,然后必须使用该新值相应地更改DOM。

ViewBag
仅存在于Razor视图的上下文中,只有在返回
view()
时,Razor视图本身才存在,
PartialView()
,等等。如果您返回的是JSON,那么您得到的就只有这些了。您不能使用
ViewBag

也就是说,我认为你对事情是如何运作的总的来说是困惑的。最初,您的应用程序使用HTML文档进行响应。其他一切,如操作、视图等,都是关于获取最终可以返回到客户端(本例中为web浏览器)的HTML文档

一旦发送了响应。服务器完成了。在客户端,web浏览器解析文档并创建各种对象模型:DOM、CSSOM等。然后使用这些对象模型渲染页面(绘制)。在此过程中和之后,您的JavaScript将运行。所有这些都发生在客户端,服务器不知道也不关心;它已经完成了它的工作

然后,您需要从服务器获取一些新信息。这需要来自客户端的新请求,这将导致来自服务器的新响应。该请求可以是用户在浏览器中进行导航的形式(在这种情况下,整个浏览器窗口/选项卡视图将发生更改),也可以是AJAX请求的形式,即保持浏览器窗口/选项卡中的当前视图不变

XMLHttpRequest
,实际的JavaScript客户端