Asp.net mvc 如何与Json一起访问ViewBag
我在Json和Linq的帮助下通过返回数据库值来实现自动完成功能。我需要实现编辑功能。对于编辑功能,我需要将viewBag数据返回到我的视图。但在返回Json结果时,我无法访问我的viewBagAsp.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
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客户端