2013-05-31 3 views
3

Я хочу передать мой ViewModel из View в контроллер для этого я использую Ajax, и мой код выглядит следующим образом, в котором я должен показать окно предупреждения, и я получаю сообщение об ошибке как «Недействительный примитив JSON: информация».Передача модели из представления в контроллер с помощью Jquery Ajax

Контроллер:

[HttpPost] 
     public JsonResult Test(OData.FtpAccount info) { 
      try { 
       string FileName = Utils.File.TempName + ".txt"; 

       FtpClient ftp = GetClient(info); 

       UnicodeEncoding uni = new UnicodeEncoding(); 
       byte[] guid = uni.GetBytes(Utils.File.TempName); 

       FileName = info.Root + (info.Root.EndsWith("/") ? "" : "/") + FileName; 
       ftp.Upload(GetTempFile(guid),FileName); //Upload File to Ftp in FtpPath Directory. 

       string url = info.GetHttpUrl(FileName); 
       byte[] result = Utils.Web.ReadByte(new System.Uri(url)); 

       ftp.FtpDelete(FileName); 

       if (uni.GetString(result) == uni.GetString(guid)) { 
        return Json(new{ success=true}); 
       } else { 
        return Json(new { warning = true, message = "Warning : Test Upload worked, Test Delete Worked, Http Access of File did not return same content as uploaded." }); 
       } 
      } catch (System.Exception ex) { 
       return Json(new { error = true, message = "Ftp Test Failed : " + ex.Message }); 
      } 
     } 

Вид:

@model VZDev.ViewModels.FtpAccountViewModel 
@{ 
    ViewBag.Title = "Watch"; 
    var val = Json.Encode(Model); 

} 
<div class="control-group"> 
     <div class="controls"> 
      <button type="button" class="btn" id="test"><i class="icon-test"></i> Test</button> 
     </div> 
    </div> 


} 
<script type="text/javascript"> 
    $(function() { 
     $("#test").click(function() { 
      var [email protected](val); 
      $.ajax({ 
       type: 'post', 
       url: rootURL + 'Ftp/Test', 
       data: {info:JSON.stringify(check)}, 
       contentType: 'application/json; charset=utf-8', 
       dataType: "json", 
       success: function (data) { 
        alert(data); 
       } 
      }); 
     }); 
    }); 

</script> 

Модель:

общественный частичный класс FtpAccount {

[DataMember(Order = 1)] 
    [ScaffoldColumn(false),DatabaseGenerated(DatabaseGeneratedOption.Identity),Key,UIHint("Id"),Display(Name="Id")] 
    [Column("ID")] 
    public long ID{get;set;} 

    [DataMember(Order = 2)] 
    [UIHint("Service Provider"),Display(Name="Service Provider"),Required(ErrorMessage="Service Provider is required"),StringLength(100)] 
    [Column("ServiceProvider")] 
    public string ServiceProvider{get;set;} 

    [DataMember(Order = 3)] 
    [UIHint("Ftp Path"),Display(Name="Ftp Path"),Required(ErrorMessage="Ftp Path is required"),StringLength(500)] 
    [Column("FtpPath")] 
    public string FtpPath{get;set;} 


} 

}

Теперь я хочу передать свою ViewModel из представления в контроллер. Спасибо заранее!

+0

Возможный дубликат [Invalid JSON primitive: id] (http://stackoverflow.com/questions/7830961/invalid-json-primitive-id) – CodeCaster

ответ

3

Изменить

data: {info:JSON.stringify(check)} 

Для

data: '{info:' + JSON.stringify(check) + '}' 

Смотрите также this question.

+0

эта работа для меня, но я должен показать «return Json (new {success = true}); и "return Json (new {error = true, message =" Ftp Test Failed: "+ ex.Message})" в моем поле оповещения –

+0

Итак, в чем проблема с этим? – CodeCaster

+0

Мне нужно показать на первом возврате, что «Тест прошел», а во втором возвращении «Ftp Test Failed» –

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