$ .post不会刷新View MVC Asp.net

时间:2014-07-18 19:59:35

标签: javascript asp.net-mvc

该视图有2个div。一个div显示文本框。另一个根据Model.Flag值显示文本。在我调试的$ post上,我根据需要获得内部和外部html(使用第二个div文本)。但返回的视图只有文本框值而不是其他div值。由于变量(jq)具有正确的数据,有人可以说如果我必须通过document.write之类的东西重写$ .post成功的HTML吗?观点是:

<% using (Html.BeginForm())
{
%>
<div>
    The test message is <%= @Html.TextBox("Testname",Model.Testname)  %>
</div>
<%
if (Model.Flag)
    { %>
    <div>
        Print this as true
        </div>         
<%} %>
    <input type ="button" value ="ClickChange" id="btnChange" /> 
<% } %>

$(function() 
{
    $("#btnChange").click(function() 
    {
        alert("clicked");
        $.post("/Display/DisplayAgain/", { Testname: $("#Testname").val() },
        function(data) 
        {
            alert("success");
            var jq = jQuery(data);
        });
    });

});

控制器是:

public ActionResult FirstDisplay()
{
    TestWierd.ViewModels.DisplayViewModel dispModel = new  
        TestWierd.ViewModels.DisplayViewModel();
    return View("Details",dispModel);
}

public ActionResult DisplayAgain(TestWierd.ViewModels.DisplayViewModel dispModel)
{
    dispModel.Flag = true;
    return View("Details", dispModel);
}

我理解$,post会刷新整个视图,但这不会发生。我的理解是不正确的。当我调试视图时,我得到Model.Flag为true,当我通过调试javascript将监视添加到变量jq时,我得到内部HTML和外部HTML以及所需的HTML,即文本框及其值由用户输入并且HTML&#34;将其打印为true&#34;,但在浏览器上我只看到带有其值的texbox,而不是带有文本&#34的其他div;将其打印为true&#34;。  难道我做错了什么。我可以不使用$ .post来检查模型值并显示文本吗?是否只需要服务器端来刷新视图。请帮忙。

1 个答案:

答案 0 :(得分:0)

如果您要在变量$jq中显示要显示的内容,则需要更新所需div的内容。

在div中添加ID,以便您轻松引用它

<div id="Message">
     The test message is <%= @Html.TextBox("Testname",Model.Testname)  %>
</div>

然后设置内容

//if the content is html then
$("#Message").html($jq);

//if the content is text (special characters like <> will be escaped automatically)
$("#Message").text($jq);

请注意,如果您想保留句子的其余部分,则可以使用带有id的范围...

<div>
    The test message is <span id="Message">
        <%= @Html.TextBox("Testname",Model.Testname) %>
    </span>
</div>

进一步解释......所有AJAX方法($.ajax$.get$.post等)都会导致浏览器打开与服务器的连接并读取响应,但是,他们都没有自动更新页面。如果要进行整页刷新,可以使用表单submit it。 Ajax方法只是给你一个变量的响应(无论是文本,html作为字符串还是从json构建的复杂对象),让你按照自己的意愿使用它(覆盖,追加,在javascript中使用它来更新许多不同的ui组件等等。)

因此,使用Ajax与使用json对象响应的服务进行通信通常更简单

{
    "TestMessage": "Some test message",
    "AnotherMessage": "Here I am"
}

或只是您要替换的页面部分(例如省略<html><body>等)

An <span style="font-weight:bold;">Html</span> message to be injected into the page

如果您想从Asp.Net Mvc控制器返回Json,请参阅this question