再次调用相同的控制器方法不起作用
Calling the same controller method again does not work
我的 WriteupController.cs 中有以下控制器方法:
public async Task<ActionResult> Writeups(string symbol, string status,
DateTime? mktDate, DateTime? writeupDate)
{
// get datamodel
return View(datamodel);
}
这是使用
调用的
<a href="@Url.Action("Writeups", "Writeup", new { symbol = item.SecSymbol, status = item.Status, mktDate = "10/10/2010", writeupDate = "10/11/2010" })
并显示正确的视图 cshtml。到目前为止,一切都很好。页面上有带有符号的下拉列表。选择一个后,我有以下 ajax 调用:
$("#companiesDDL").change(function () {
var postdata = { "symbol": "1099.HK", "status": "A", "mktDate": "10/10/2010", "writeupDate": "10/10/2010" };
$.ajax({
url: '@Url.Action("Writeups", "Writeup")',
dataType: "json",
data: postdata,
success: function (result, status, xhr) {
alert("Result: " + status + " " + xhr.status + " " + xhr.statusText)
},
error: function (xhr, status, error) {
}
});
});
如您所见,url 是相同的。调试时,我可以在控制器方法的数据模型中以及 cshtml 视图本身中看到正确的数据。但是,页面未加载。也就是说,我没有看到新符号的信息。我该如何解决这个问题?
编辑:
以下是我的看法。如前所述,最初我看到的是 CompDescShort。但是当我从 ajax.
打电话时不是
<textarea name="editor" id="editor" rows="10" cols="80">
@if (Model.Count > 0)
{
@Model.CompDescShort
}
</textarea>
已修复,使用:
<select id="companiesDDL" class="tmpdisplay" style="margin-left: 15px;" onchange="location.href=this.value">
@foreach (var item in Model.companyList)
{
<option value='@Url.Action("Writeups", "Writeup", new { symbol = item.SecSymbol, status = "A" })'>@item.SecDesc</option>
}
</select>
我很感激你有一个修复程序,当一个项目被选中时会刷新整个页面,但采用你原来的 ajax 方法,下面的方法应该有效;
$("#companiesDDL").change(function () {
var postdata = { "symbol": "1099.HK", "status": "A", "mktDate": "10/10/2010", "writeupDate": "10/10/2010" };
$.ajax({
url: '@Url.Action("Writeups", "Writeup")',
dataType: "json",
data: postdata,
success: function (result, status, xhr) {
$('#editor).val(xhr.statusText);
},
error: function (xhr, status, error) {
}
});
您遗漏的一点是,当 ajax 调用完成时,由调用者决定如何处理它。在这种情况下,我们使用 ID 定位器 $('#editor')
定位 jQuery 中的 <textarea>
元素,并将其值设置为 val()
.
我的 WriteupController.cs 中有以下控制器方法:
public async Task<ActionResult> Writeups(string symbol, string status,
DateTime? mktDate, DateTime? writeupDate)
{
// get datamodel
return View(datamodel);
}
这是使用
调用的<a href="@Url.Action("Writeups", "Writeup", new { symbol = item.SecSymbol, status = item.Status, mktDate = "10/10/2010", writeupDate = "10/11/2010" })
并显示正确的视图 cshtml。到目前为止,一切都很好。页面上有带有符号的下拉列表。选择一个后,我有以下 ajax 调用:
$("#companiesDDL").change(function () {
var postdata = { "symbol": "1099.HK", "status": "A", "mktDate": "10/10/2010", "writeupDate": "10/10/2010" };
$.ajax({
url: '@Url.Action("Writeups", "Writeup")',
dataType: "json",
data: postdata,
success: function (result, status, xhr) {
alert("Result: " + status + " " + xhr.status + " " + xhr.statusText)
},
error: function (xhr, status, error) {
}
});
});
如您所见,url 是相同的。调试时,我可以在控制器方法的数据模型中以及 cshtml 视图本身中看到正确的数据。但是,页面未加载。也就是说,我没有看到新符号的信息。我该如何解决这个问题?
编辑:
以下是我的看法。如前所述,最初我看到的是 CompDescShort。但是当我从 ajax.
打电话时不是 <textarea name="editor" id="editor" rows="10" cols="80">
@if (Model.Count > 0)
{
@Model.CompDescShort
}
</textarea>
已修复,使用:
<select id="companiesDDL" class="tmpdisplay" style="margin-left: 15px;" onchange="location.href=this.value">
@foreach (var item in Model.companyList)
{
<option value='@Url.Action("Writeups", "Writeup", new { symbol = item.SecSymbol, status = "A" })'>@item.SecDesc</option>
}
</select>
我很感激你有一个修复程序,当一个项目被选中时会刷新整个页面,但采用你原来的 ajax 方法,下面的方法应该有效;
$("#companiesDDL").change(function () {
var postdata = { "symbol": "1099.HK", "status": "A", "mktDate": "10/10/2010", "writeupDate": "10/10/2010" };
$.ajax({
url: '@Url.Action("Writeups", "Writeup")',
dataType: "json",
data: postdata,
success: function (result, status, xhr) {
$('#editor).val(xhr.statusText);
},
error: function (xhr, status, error) {
}
});
您遗漏的一点是,当 ajax 调用完成时,由调用者决定如何处理它。在这种情况下,我们使用 ID 定位器 $('#editor')
定位 jQuery 中的 <textarea>
元素,并将其值设置为 val()
.