2013-05-24 1 views
2

Hy 사용자!컨트롤러는 항상 json에서 지정된 필드 만 null을받습니다.

첫째 : 나는이 게시물은 이곳에 내 질문에 시작 발견했습니다 questions/11344035 - questions/15939944 - questions/9412449 - questions/9162359-questions/1551263합니다.

둘째,이 내 첫 MVC4 프로젝트입니다 다음 중 어느 것도 내 문제 ... :(

잘 해결되지, 다음과 같이 나는 $ 아약스 당 내 데이터를 전송 tryed :

var exames = { 
    "ExameId": "", 
    "Valor": "", 
    "CodLab": "", 
    "Dias": "", 
    "LayoutId": "" 
}; 
var apoio = { 
    "ApoioId": "", 
    "Razao": "", 
    "Endereco": "", 
    "Bairro": "", 
    "Cidade": "", 
    "Uf": "", 
    "Cep": "", 
    "Telefone": "", 
    "Fax": "", 
    "Email": "", 
    "CodLab": "", 
    "Obs": "", 
    "Status": "", 
    "ArqRotina": "", 
    "ArqApoio": "", 
    "Senha": "", 
    "Exames": [] 
}; 

apoio.ApoioId = $("#hdApoioId").val(); 
apoio.Razao = $("#Razao").val(); 
apoio.Endereco = $("#Endereco").val(); 
apoio.Bairro = $("#Bairro").val(); 
apoio.Cidade = $("#Cidade").val(); 
apoio.Uf = $("#Uf").val(); 
apoio.Cep = $("#Cep").val(); 
apoio.Telefone = $("#Telefone").val(); 
apoio.Fax = $("#Fax").val(); 
apoio.Email = $("#Email").val(); 
apoio.CodLab = $("#CodLab").val(); 
apoio.Obs = $("#Obs").val(); 
apoio.Status = $("#Status").val(); 
apoio.ArqRotina = $("#ArquivoRotina").val(); 
apoio.ArqApoio = $("#ArquivoApoio").val(); 
apoio.Senha = $("#SenhaLab").val(); 

var tbody = document.getElementById(idTabExames).tBodies[0]; 
var numLinhas = tbody.rows.length; 

for (var i = 0; i < numLinhas; i++) { 
    exames.ExameId = tbody.rows[i].cells[0].firstChild.nodeValue.toString(); 
    exames.CodLab = tbody.rows[i].cells[1].firstChild.nodeValue; 
    exames.Dias = tbody.rows[i].cells[2].firstChild.nodeValue; 
    exames.Valor = tbody.rows[i].cells[3].firstChild.nodeValue; 
    exames.LayoutId = tbody.rows[i].cells[4].firstChild.nodeValue; 
    apoio.Exames.push(exames); 
    exames = { 
     "ExameId": "", 
     "CodLab": "", 
     "Dias": "", 
     "Valor": "", 
     "LayoutId": "", 
     "ApoioId": "" 
    }; 
} 

$.ajax({ 
    url: '/ApoioExames/Create', 
    data: JSON.stringify(apoio), 
    type: 'POST', 
    contentType: "application/json", 
    dataType: 'json', 
    processData: true, 
    success: function (result) { 
     if (result.Success == "1") { 
      if (console.window) console.log('sucess: '+result); 
      window.location.href = "/ApoioExames/Index"; 
     } 
     else { 
      alert(xhr.status); 
      alert('Error: ' + xhr.responseText); 
     } 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 

JSON.stringfy (apoio)을 적용, 나는 항상. 내 컨트롤러에 유효한 (http://jsonlint.com 확인) JSON하지만 apoio.Exames 필드 (만)을의 반환을 널 (null)입니다 얻을!

[HttpPost] 
public JsonResult Create(ApoioModel apoio) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      if (apoio.Id > 0) 
      { 
       var exames = db.DbApoioExames.Where(p => p.ApoioId == apoio.Id); 
       foreach (ApoioExmModel exm in exames) 
        db.DbApoioExames.Remove(exm); 
       foreach (ApoioExmModel exm in exames) 
        db.DbApoioExames.Add(exm); 
       db.Entry(apoio).State = EntityState.Modified; 
      } 
      else 
      { 
       db.DbApoio.Add(apoio); 
      } 
      db.SaveChanges(); 
      //If (Sucess== 1) { Salvar/Atualizar } else { Exception } 
      return Json(new { Success = 1, ApoioId = apoio.Id, ex = "" }, JsonRequestBehavior.AllowGet); 
     } 
    } 
    catch (Exception ex) 
    { 
     return Json(new { Success = 0, ex = ex.Message }, JsonRequestBehavior.AllowGet); 
    } 
    return Json(new { Success = 0, ex = new Exception("Impossível Salvar").Message }, JsonRequestBehavior.AllowGet); 
} 

내 모델 ApoioModel 및 ApoioExmModel은 : 나는 CRUD 마스터/세부 정보를 작성하려합니다

[Table(name: "apoio", Schema = "public")] 
public class ApoioModel 
{ 
    [Key, Column("id", Order = 0)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [Column("razao")] 
    [Display(Name = "Razão Social")] 
    [DataType(DataType.Html)] 
    [Required(ErrorMessage = "A razão social deve ser informada")] 
    public string Razao { get; set; } 

    [Display(Name = "Endereço")] 
    [Column("endereco")] 
    public string Endereco { get; set; } 

    [Display(Name = "Bairro")] 
    [Column("bairro")] 
    public string Bairro { get; set; } 

    [Display(Name = "Cidade")] 
    [Column("cidade")] 
    public string Cidade { get; set; } 

    [Display(Name = "CEP")] 
    [Column("cep")] 
    public string Cep { get; set; } 

    [Display(Name = "UF")] 
    [Column("uf")] 
    [StringLength(2)] 
    public string Uf { get; set; } 

    [Display(Name = "Status")] 
    [Range(0, 1), Column("status")] 
    public int Status { get; set; } 

    public virtual ICollection<ApoioExmModel> ApoiosExm { get; set; } 

} 

Table(name: "apoioexm", Schema = "public")] 
public class ApoioExmModel 
{ 
    [Key, Column("id")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int? Id { get; set; } 

    [Column("exame_id")] 
    public int ExameId { get; set; } 

    [Column("apoio_id")] 
    public int ApoioId { get; set; } 

    [Column("valor")] 
    public float Valor { get; set; } 

    [Column("codlab")] 
    public string CodLab { get; set; } 

    [Column("dias")] 
    public float Dias { get; set; } 

    [Column("layout_id")] 
    public int LayoutId { get; set; } 

    [ForeignKey("ApoioId")] 
    public virtual ApoioModel Apoios { get; set; } 
} 

. SQL Server가 아닌 Postgre를 사용하고 있지만 문제는 아닙니다.

Chrome에서 디버깅 할 때 데이터가 전송 중임을 확인합니다.

Request U R L : h t t p :// l o c a l h o s t:9795/ApoioExames/Create 
Request Headersview source 
Accept:application/json, text/javascript, */*; q=0.01 
Content-Type:application/json 
Origin:h t t p :// localhost:9795 
Referer: h t t p :// localhost:9795/ApoioExames/Create 
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 
X-Requested-With:XMLHttpRequest 
Request Payload 
{Razao:kkkkkkk, Endereco:kkkkkkkkk, Bairro:kkkkkk, Cidade:kkkk, Uf:kk, Cep:12341234,…} 
Bairro: "kkkkkk" 
Cep: "12341234" 
Cidade: "kkkk" 
Endereco: "kkkkkkkkk" 
Exames: [{ExameId:1252, Valor:1, CodLab:1, Dias:1, LayoutId:1826},…] 
0: {ExameId:1252, Valor:1, CodLab:1, Dias:1, LayoutId:1826} 
1: {ExameId:1252, CodLab:1, Dias:1, Valor:1, LayoutId:1826, ApoioId:} 
Razao: "kkkkkkk" 
Uf: "kk" 

누군가가 도와 줄 수 있습니까? 죄송합니다. 내 영어와 큰 게시물! 감사합니다.

+1

C# 클래스에는 'ApoiosExm' 속성이 있지만 JSON의 속성을 Exames로 보내야합니다. – wal

+0

@ tereško 예! – GustavoAdolfo

답변

1

두 가지를 염두에 둡니다.

  1. ApoiosExmExames 이름 또는 그 반대의
  2. 나는 그것이 ICollection<ApoioExmModel>에 매핑 할 수 있는지 확실하지 않습니다해야합니다. 어쨌든, 나에게 묻는다면 엔티티 클래스에 직접 매핑하지 않는 것이 좋습니다.
+0

Ohh Man !!! 그렇게 명백한. .. 그리고 나는 그것을 보지 않고 2 일을 보내었다! !! @maxbeaudoin 감사합니다. – GustavoAdolfo

관련 문제