MVC中的Ajax Post ...为什么字符串为null?

时间:2015-08-04 14:04:47

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

所以基本上我在MVC应用程序中创建一个Request系统。我有这个"创建请求"我可以在Telerik的DropDownList中选择我想要做的请求类型的部分。我想要做的是,每次从列表中选择某些内容时,都会显示一个部分视图,其中包含与该类型请求相关的表单。

这是我在Create.cshtml视图中的ajax帖子:

<script>
    function change() {
        var value = $("#RequestType").val();
        alert(value);
        $.ajax({
            url: "/Request/CreateRequestForm",
            type: "get",
            data: { requestValue : JSON.stringify(value)}
        }).done(function (data) {
            $("#partialplaceholder").html(data);
        }).fail(function () {
            alert('error');
        })
    };
</script>

这是我的控制者:

public ActionResult Index()
        {
           //Things
            return View();
        }

    [HttpGet]
    public ActionResult Create()
    {
        return View();
    }

    [HttpGet]
    public PartialViewResult CreateRequestForm(string dropDownValue)
    {   string partialView="";
        int RequestType = Convert.ToInt32(dropDownValue);
        switch (RequestType)
        {
            case 1 :
                partialView+="_CreateAbsence";
                break;
            case 2 :
                partialView += "_CreateAdditionalHours";
                break;
            case 3 :
                partialView += "_CreateCompensationDay";
                break;
            case 4 :
                partialView += "_CreateErrorCorrection";
                break;
            case 5 :
                partialView += "_CreateVacation";
                break;
        }
        return this.PartialView(partialView);
    }

每次偶数触发我的dropDownValue字符串为空...为什么?提前致谢! :)

EDIT 查看代码

<h1>Create New Request</h1>

        @(Html.Kendo().DropDownList()
          .Name("RequestType")
          .DataTextField("Text")
          .DataValueField("Value")
          .Events(e => e.Change("change"))
          .BindTo(new List<SelectListItem>() {
              new SelectListItem() {
                  Text = "Absence",
                  Value = "1"
              },
              new SelectListItem() {
                  Text = "Additional Hours",
                  Value = "2"
              },
              new SelectListItem() {
                  Text = "Compensation Day",
                  Value = "3"
              },
              new SelectListItem() {
                  Text = "Error Correction",
                  Value = "4"
              },
              new SelectListItem() {
                  Text = "Vacation",
                  Value = "5"
              }
          })
          .Value("1")
        )


<script>
    function change() {
        var value = $("#RequestType").val();
        alert(value);
        $.ajax({
            url: "/Request/CreateRequestForm",
            type: "get",
            data: { requestValue : JSON.stringify(value)}
        }).done(function (data) {
            $("#partialplaceholder").html(data);
        }).fail(function () {
            alert('error');
        })
    };
</script>

<div id="partialplaceholder">

</div>

1 个答案:

答案 0 :(得分:1)

首先:标题显示您正在发布帖子请求,但在您的代码中有一个获取请求。

第二:为了使其工作,您必须更改您要发送的javascript中的数据名称,以匹配c#代码中的参数名称,如:

<script>
    function change() {
        var value = $("#RequestType").val();
        alert(value);
        $.ajax({
            url: "/Request/CreateRequestForm",
            type: "get",
            data: { dropDownValue: JSON.stringify(value)}
        }).done(function (data) {
            $("#partialplaceholder").html(data);
        }).fail(function () {
            alert('error');
        })
    };
</script>

或更改c#方法中参数的名称,如:

        [HttpGet]
        public PartialViewResult CreateRequestForm(string requestValue )
        {
          ... 
        }
第三:我非常确定你不需要JSON.Stringify()数据。有关Stringify()方法和&amp ;;的更多详细信息。用法请查看this link