繁体   English   中英

ASP.Net C#POST不返回视图

[英]ASP.Net C# POST not returning view

我试图使用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的Debugger中看到变量获取正确的值,但是视图没有改变。

我什至在firebug控制台中看到了预期的视图(包含所有预期的处理)。 但我的页面仍然没有改变。

我怎样才能做到这一点 ?

默认情况下,您应该有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 ,请根据您的情况进行修改。

当您使用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

    }
}

您实际上在哪里更新页面上的任何内容? 您要做的就是发送请求:

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视图?)来更新页面内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM