该视图有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来检查模型值并显示文本吗?是否只需要服务器端来刷新视图。请帮忙。
答案 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