MVC Button没有使用HttpPost

时间:2017-03-21 23:46:11

标签: asp.net-mvc

我对MVC和DevExpress相对较新。我有一个UI,我需要采取日期字段并将其传递给控制器​​。非常简单的任务。

我的观点看起来像。

<script type="text/javascript">
    var positionDate = "1/1/2014";

    function AddClick(s, e) {
        debugger;
        positionDate = LockedDateToAdd.GetDate().toDateString();

        $.ajax({
            type: "POST",
            url: "/LockedDate/AddLockedDate",
            data: { positionDate: positionDate },
            success: function (msg) { LockedDateGridView.PerformCallback(); }
        });
    }
</script>

@{
    ViewBag.Title = "Locked Dates";
}

<h4>Locked Dates</h4>

@using (Html.BeginForm())
{
    <table>
        <tr>
            <td>
                @Html.DevExpress().DateEdit(settings =>
                {
                    settings.Name = "LockedDateToAdd";
                    settings.Date = DateTime.Today;
                    settings.Properties.AllowNull = false;
                    settings.Properties.DateOnError = DateOnError.Today;
                    settings.Properties.CalendarProperties.ShowWeekNumbers = false;
                }).GetHtml()
            </td>
            <td>
                @Html.DevExpress().Button(settings =>
                {
                    settings.Name = "LockedDateAdd";
                    settings.Text = "Add";
                    settings.ClientSideEvents.Click = "AddClick";
                    settings.UseSubmitBehavior = false;
                }).GetHtml()
            </td>
        </tr>
    </table>
}

我希望使用AddClick方法传递Date。

控制器看起来像:

[HttpPost]
public ActionResult AddLockedDate(string positionDate)
{
    DateTime dateValue;

    if (DateTime.TryParse(positionDate, out dateValue))
    {
        _dataAccess.AddLockedDate(dateValue);
    }

    return Content("");
}

问题是,我的代码没有点击AddLockedDate ActionResult。当我删除[HttpPost]时,它确实被击中但是positionDate变为空。

我在这里缺少什么?任何的想法。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您的代码似乎没有问题。只需按照以下更新ajax方法。

<script type="text/javascript">
    var positionDate = "1/1/2014";

    function AddClick(s, e) {
        debugger;
        positionDate = LockedDateToAdd.GetDate().toDateString();

        $.ajax({
            type: "POST",
            url: "/LockedDate/AddLockedDate",
            data: JSON.stringify({ positionDate: positionDate }),
            contentType: 'application/json; charset=utf-8',
            success: function (msg) { LockedDateGridView.PerformCallback(); }
        });
    }
</script>

答案 1 :(得分:1)

当JS的客户端日期的不同表示由DateTime.TryParse无法直接解析时,会出现问题。

使用console.log(positionDate),捕获的日期格式如下(在当前撰写时):

Wed Mar 22 2017

使用TryParse时日期格式是不可解析的,但没有指定正确的日期格式,因此使用TryParseExact正确格式化:

<强>控制器

[HttpPost]
public ActionResult AddLockedDate(string positionDate)
{
     DateTime dateValue;

     // parse exactly as toDateString method returns
     if (DateTime.TryParseExact(positionDate, "ddd MMM d yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
     {
         _dataAccess.AddLockedDate(dateValue);
     }

     return Content("");
}

查看

<script type="text/javascript">
    var positionDate = "1/1/2014";

    function AddClick(s, e) {
        debugger;
        positionDate = LockedDateToAdd.GetDate().toDateString();

        $.ajax({
            type: "POST",
            url: "@Url.Action("AddLockedDate", "LockedDate")",
            data: JSON.stringify({ positionDate: positionDate }),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (msg) { LockedDateGridView.PerformCallback(); }
        });
    }
</script>

相关:

Javascript date to C# via Ajax

DateTime.TryParse(MSDN)

DateTime.TryParseExact(MSDN)