2015-08-04 3 views
1

Так что в основном я создаю систему Request в приложении MVC. У меня есть этот раздел «Создать запрос», где я могу выбрать тип запроса, который я хочу сделать в DropDownList от Telerik. То, что я хочу сделать, каждый раз, когда я выбираю что-то из списка, появляется частичное представление с формой, связанной с этим типом запроса.Ajax Post в MVC ... Почему строка null?

Это мой Аякс Сообщение от Create.cshtml Вида:

<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); 
    } 

времени Everytime четного запускает мой dropDownValue строка пустая ... Почему? Заранее спасибо! :)

EDIT View Code

<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

отправку пары имя/значение, которое 'requestValue: someValue' но ваш' CreateRequestForm() 'метод имеет параметр с именем' dropDownValue '(не' requestValue') - измените одно или другое так, чтобы они соответствовали (и его не нужно было строчить значение) –

+0

И поскольку вы явно хотите 'int', тогда параметр должен быть' int requestValue' (а не 'string') –

ответ

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() & обыкновений, пожалуйста, проверьте this link

Смежные вопросы