JS从文本框中抓取文本,传递给asp.net mvc ActionResult,但ActionResult参数显示为null

时间:2014-10-23 13:58:53

标签: javascript c# jquery asp.net asp.net-mvc

JS从文本框中抓取文本,传递给asp.net mvc ActionResult但ActionResult参数显示为null

我有2个文本框,在用户选择时由2个日期选择器填充,但是当我使用下面的javascript将其传递给actionresult时,信息正确地从文本框中获取。 actionresult的参数显示为null。

我该如何解决?

代码:

@Html.Label("Start", "Start Date:")
@Html.TextBox("Start", string.Empty, new {@id = "Start", @class = "datepicker"})
@Html.Label("endd", "End Date:")
@Html.TextBox("endd", string.Empty, new {@id = "End", @class = "datepicker"})
<input type="submit" value="Apply" id ="DateSelected" />


<script type="text/javascript">
  $('.datepicker').datepicker();
$("#DateSelected").click(function () {
        var startD = $('#Start').val().toString();
        var endD = $('#End').val().toString();
                $.ajax({
                url: '/Docs/FirstDoc',
                type: "Post",
                data: { start: String.valueOf(startD), end: String.valueOf(endD) },
            });
</script>

行动结果:

    [HttpPost]
    public ActionResult FirstDoc(string start, string end)
    {
        FirstDocModel firstDocModel = FirstDocHelper.RunFunction(start, end);
        return PartialView(firstDocModel);
    }

2 个答案:

答案 0 :(得分:1)

这就是我所说的 - 但首先我个人也发现ajax对MVC控制器的绑定有时会很痛苦。它很灵活,但如果有任何不合适的地方,你就会得到空值 - 正如你所知道的那样。总之...

[HttpPost]
    public ActionResult FirstDoc(MyObject inputObj)
    {
       //use inputObj here as needed
    }

然后,您需要MyObject的定义 - 保持简单

public class MyObject{
    string start {get;set;}
    string end {get;set;}
}

如果所有的鸭子都在一排,当然包括你在ajax方面的选项,你的对象'应该'绑定。

答案 1 :(得分:0)

您传递data的方式适用于type: 'get',但不适用于post。试试这个:

data: JSON.stringify({ start: startD, end: endD }),