0

我创建了一个工作 MVC 页面,它带回了一组显示特定报告的数据(按支出金额排列的顶级客户)。我正在尝试添加两个 jQuery datepicker 文本框,允许用户通过开始和结束日期绑定该报告。它目前正在工作,因为我有一个绑定了 jQuery click 事件的 HTML 锚标记,它启动了一个处理程序。处理程序将开始/结束日期扔给我的控制器中的 HttpPost ActionResult 方法,并获取更新的数据集。

问题是当我尝试将数据返回到视图(而不是返回 Content("true"))时,没有返回任何数据,并且处理程序给了我我的 OnFailure 消息。是否可以通过这种方式将数据传递给视图,或者我是否需要使用 Html.BeginForm 类型的方法重新编写它?

非常感谢!

这是代码:(在我看来)

<script type="text/javascript">
$(document).ready(function () {
    $(".datepicker").datepicker();

    $('#submit').click(function () {
        SetDateHandler($('#startdate').val(), $('#enddate').val(), "company");
    });

    function SetDateHandler(bounddate1, bounddate2, datetype) {
        $.ajax({
            //url: '/Projects/TestArray',
            url: '@Url.RouteUrl("SetBoundingDate")',
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            success: OnComplete,
            data: JSON.stringify({ startdate: bounddate1, enddate:bounddate2, type: datetype }),
            traditional: true,
            type: "POST",
            error: OnFail
        });

        return false;
    }
    function OnComplete(result) {
        //indow.location.href = window.location.href;
        alert("yay!");
        return true;
    }
    function OnFail(result) {
        alert('Request Failed');
        return false;
    }

});
</script>

<h2>Top Companies by Total Price for Won Quotes</h2>

<div style="float:right; width: 350px; margin: 15px;">
    <span style="float:right; margin-right: 50px;">Start Date: <input class="datepicker" id="startdate" /></span>
    <br />
    <span style="float:right; margin-right: 50px;">End Date: <input class="datepicker" id="enddate" /></span>
    <br />
    <a href="#" id="submit">Submit</a>
</div>

自定义路由:routes.MapRoute(name: "SetBoundingDate", url: "AjaxSetBoundingDate", 默认值: new { controller = "Reports", action = "SetBoundingDates" } );

在我的报告控制器中:

[HttpPost]
public ActionResult SetBoundingDates(String startdate, String enddate, String type)
{
    Schedule.Models.Reports.TopCompaniesModel Companies = new Models.Reports.TopCompaniesModel();

    ActionResult view;

    if (type == "company")
    {
        view = TopCompaniesReport(startdate, enddate);
    }
    else
    {
        view = TopContactsReport(startdate, enddate);
    }
    //return View(view);
    return Content("true");
}

再一次,如果你已经读到这里,我会在正确填充视图的情况下到达我的 Controller 方法的底部,但是当我尝试返回 View 时,它会出错,如果我返回 Content(“true”),它可以工作但什么也没有页面上的变化。

谢谢!

4

1 回答 1

1

再次感谢弗莱姆试图提供帮助。我的方法是错误的,我最终发现我需要切换到剃刀回发方法。实际上,这种方式也容易得多。

这是我的做法:

    <div style="float:right; width: 550px; margin: 15px;">
        @using (Html.BeginForm(ViewContext.RouteData.GetRequiredString("action"), "Reports", FormMethod.Post, new { id = "TheForm" }))
        {
             <span style="float:right;">

                    <div style="margin-right: 50px;float:right;">Start Date: <input class="datepicker" name="startdate" id="startdate" /></div>
                    <div style="margin-right: 50px;float:right; margin-top: 5px; clear: both;">End Date: <input class="datepicker" name="enddate" id="enddate" /></div>

                    <input id="submit" name="submit" type="submit" value="Update" style="margin-top: 10px; clear: both;float:right;" />

             </span>
             <span style="float: left;">
                @Html.DropDownList("DateDdl", (SelectList)ViewBag.DateDropDown)
             </span>           

        }
    </div>

实际上我更喜欢这种方式,因为如您所见,我将当前控制器名称传递给它以回发。通过这种方式,我将此功能放入共享的局部视图中,我可以在报告区域内的任何视图上重复使用该视图。

希望这对其他人有帮助!

于 2012-07-23T15:35:07.620 回答