使用ASP.NET,C#和Javascript,我正在尝试为用户动态获取数据,将其发布到控制器,并返回根据数据更改的视图。
以下是代码:
Javascript功能:
function editEntry(id) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "Edit?id=" + id, true);
xmlhttp.send({ id: id });
//xmlhttp.send();
}
控制器处理帖子(部分):
[HttpPost]
public ActionResult Edit(EditEvenementiel edit)
{
var contexte = new intranetEntities1();
SqlParameter Id_viewBag = new SqlParameter("@id", edit.id);
ViewBag.edit = contexte.evenementiel
.SqlQuery("SELECT * FROM evenementiel WHERE id_evenementiel = @id", Id_viewBag);
return View();
}
当我启动javascript时,我可以在firebug控制台中看到POST(工作正常),我可以看到变量在Visual Studio的调试器中获得正确的值,但视图没有改变。
我甚至在firebug控制台中看到了预期的视图(包含所有预期的处理);但我的页面仍然没有改变。
我该怎么做?
答案 0 :(得分:1)
默认情况下,您应该有2个Actions
,一个应该通过Post
方法处理/获取数据,另一个用于收集View
的数据。 (它被称为发布/重定向/获取 - 有关wiki的详细信息)
考虑到这一点,您可以将post方法保留为:
[HttpPost]
public ActionResult Edit(int id)
{
var contexte = new intranetEntities1();
SqlParameter Id_viewBag = new SqlParameter("@id", id);
EditEvenementiel edit = contexte.evenementiel.SqlQuery("SELECT * FROM evenementiel WHERE id_evenementiel = @id", Id_viewBag);
return RedirectToAction("Edit",new { edit = edit} );
}
并创建一个将数据发送到视图的新操作。
类似的东西:
public ActionResult Edit(EditEvenementiel edit)
{
//logic here
return View(edit);
}
请注意this is just an example
,根据您的情况对其进行修改。
答案 1 :(得分:0)
当您使用Ajax(XMLHttpRequest)获取此数据时,您还需要在页面上显示它,它不会自动发生。
也许是这样的?
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
alert(xmlhttp.responseText); // or put the responseText in a HTML element of your choice to do whatever you want to do
}
}
答案 2 :(得分:0)
你在哪里更新页面上的任何内容?您所做的只是发送请求:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "Edit?id=" + id, true);
xmlhttp.send({ id: id });
但你忽略了回应。浏览器不会知道您要对该响应做什么,您必须告诉它。这可能是一件简单的事情:
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById('someElement').innerHTML = xmlhttp.responseText;
}
}
基本上,使用AJAX响应(这是一个HTML视图?)来更新页面内容。