使用筛选数据调用相同的Controller不会显示更新的视图

时间:2016-02-08 13:36:17

标签: jquery asp.net-mvc

我有一个场景,我的第一个索引页面按行方式加载了一些详细数据。此外,我有3个文本框RequestID,FromDate和ToDate来过滤页面索引视图上的数据。一旦我在尊重的文本框中输入FromDate和ToDate并单击按钮,通过javascript代码我将FromDate和ToDate发送到同一个Index控制器,以根据FromDate和ToDate过滤数据。

使用FromDate和ToDate参数调用Index控制器,并且基于FromDate和ToDate的数据也会被正确过滤。

但是,一旦过滤后的数据被发送到索引视图以显示,它就不会显示过滤后的数据,尽管它会显示现有数据。

请找到以下代码供您参考。

以下是索引控制器代码。

public ActionResult Index(int? id, DateTime? StartDate, DateTime? EndDate, string status, DateTime? CloseDate)
        {
            IList<ActiveSupportIndexViewModel> activeSupport;

            if(StartDate == null && EndDate == null)
            {
                activeSupport = GetSupportIssueDetails(0, null, null);

            }
            else
            {
                activeSupport = GetSupportIssueDetails(0, StartDate, EndDate);
            }


            return View(activeSupport);
        }

最初调用activeSupport = GetSupportIssueDetails(0, null, null)并显示所有数据。

输入FromDate和ToDate后,点击按钮activeSupport = GetSupportIssueDetails(0, StartDate, EndDate)即可调用并过滤数据。

下面是编写的java脚本代码。

<script type="text/javascript">
    $(function () {

        $("#Search").click(function () {
            var RID = $('#txtRequestID').val();
            var SDate = $('#txtStartDate').val();
            var EDate = $('#txtEndDate').val();
            var stat = $('#txtStatus').val();
            var CDate = $('#txtCloseDate').val();

            alert(RID)
            alert(SDate);
            alert(EDate);
            alert(stat);
            alert(CDate);

            $.ajax({
                url: 'Home/Index',
                type: 'GET',
                data: { id: RID, StartDate: SDate, EndDate: EDate, status: stat, CloseDate: CDate },

                success: function (result) {
                    alert(result.name);
                    //alert("Hello");
                },
                error: function () {
                    alert("error");
                }

            });
            return false;

        });

    });
</script>

javasctip也可以正常执行,并使用FromDate和ToDate将数据发送到控制器。

使用FromDate和ToDate调用Index控制器后,数据将被过滤并发送到视图。但是视图不会与新过滤的数据一起出现。相反,它会显示消息框,它位于下面的javascript代码

success: function (result) {
                    alert(result.name);

现有数据保持不变。

有人可以帮我解决这个问题。

如有更多信息,请告知我们。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

在“索引”页面中,创建一个带有id的部分文件,其中放置显示记录的数据 在ajax上成功用ajax数据替换部分文件 请参阅此link

答案 1 :(得分:0)

@Anand

感谢您的链接。它工作正常。

我发布了以下我根据你的建议改变的代码。

<form id="xxx">8 text field code ...</form>
<form id="yyy">8 text field code ...</form>
<form id="zzz">8 text field code ...</form>
<script>
    $(document).ready(function() {
        $("#ifbuttonclick").click(function(e) {
            var jsonData = {};
            var form1 = $("#xxx").serializeArray(); //get form1 data
            var form2 = $("#yyy").serializeArray();
            var form3 = $("#zzz").serializeArray();
            var formData = {
                "form1": form1,
                "form2": form2,
                "form3": form3
            };

            console.log(formData); // working fine

            $.each(formData, function() {
                if (jsonData[this.name]) { //**here shows JsonData is Undefined**
                    if (!jsonData[this.name].push) {
                        jsonData[this.name] = [jsonData[this.name]];
                    }
                    jsonData[this.name].push(this.value || '');
                } else {
                    jsonData[this.name] = this.value || '';
                }
            });
            console.log(jsonData);
            $.ajax({
                type: "POST",
                beforeSend: function(request) {
                    request.setRequestHeader("Authorization", "xxxxxxxxxxxx");
                },
                url: "...mydburl....",
                contentType: 'application/json',
                dataType: 'json',
                data: jsonData,
                success: function(data, textStatus, jqXHR) {
                    $("#response").text("");
                    $("#response").append(data);
                }
            });
            e.preventDefault();
        })
    })
</script>

再次感谢你。