【问题标题】:Calling the same controller method again does not work再次调用相同的控制器方法不起作用
【发布时间】:2018-05-29 22:30:06
【问题描述】:

我的 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) {                     
                }
            });
        });

如您所见,网址是相同的。调试时,我可以在控制器方法中的数据模型中看到正确的数据,也可以在 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>

【问题讨论】:

  • 你想对Action的结果做什么?将其插入Div,在新标签中打开?加载到当前窗口?或者您需要接收更新当前页面上部分部分的信息?
  • 请参阅编辑。有类似的文本区域等。我只想显示同一页面,包含所选符号的数据。
  • 发帖后alert()被点击了吗?
  • 是的,正在触发警报。
  • 毛里是正确的。您正在进行 AJAX 调用,因此您的 DOM 不会被刷新,除非您这样做 js: $('#editor').html(result); 在您的成功承诺中。 Url.Action 有效,因为这是一个完整的请求。

标签: c# jquery ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

我很感激您有一个修复程序,当一个项目被选中但采用您原来的 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 中定位 &lt;textarea&gt; 元素,并将其值设置为 val()

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2015-10-07
    相关资源
    最近更新 更多