2012-10-01 23 views
0

客戶要張貼一對多的關係數據和JSON MVC3

public class ClientModelData 
{ 
    public int ClientID { get; set; } 
    public string ClientName { get; set; } 
    public string Phone { get; set; } 
    public string Address { get; set; } 
    public IList<int> LocationID { get; set; } 
} 

控制器

[HttpPost] 
    public ActionResult AddClient(ClientModelData client) 
    { 
     Client _client = new Client() 
     { 
      //ClientCode=client.ClientCode, 
      ClientName = client.ClientName, 
      Phone = client.Phone, 
      Ext = client.Ext, 
      Address = client.Address, 
      CreatedBy = 1, 
      CreatedDate = DateTime.Now, 
      ModifiedBy = 1, 
      ModifiedDate = DateTime.Now, 
      ModifiedIP = Request.ServerVariables["REMOTE_ADDR"] 
     }; 
     db.Clients.Add(_client); 
     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbEntityValidationException dbEx) 
     { 
      string error = string.Empty; 
      foreach (var validationErrors in dbEx.EntityValidationErrors) 
       foreach (var validationError in validationErrors.ValidationErrors) 
        error += string.Format("Property: {0} Error: {1}", validationError.PropertyName, 
         validationError.ErrorMessage); 

      return Json(new 
      { 
       status = false, 
       message = "Unable to update information for selected client, please contact administrator. For detail <a class='errordetail'>click here</a>", 
       exception = error 
      }); 
     } 
     return Json(_client); 
    } 

我有一個複選框列表:

<ul class="locations"> 
           @foreach (var item in Model.Locations) 
           { 
            <li> 
             <label> 
              <input type="checkbox" id="chkLocations" name="chkLocations" 
              value="@item.LocationID" /> 
              @item.LocationTitle</label> 
            </li> 
           } 
          </ul> 

**的Json對象包含值:**

var allVals = []; 
      $('#chkLocations:checked').each(function() { 
       allVals.push($(this).val()); 
      }); 
      var dataPacket = { 
       ClientName: $("#txtClientName").val(), 
       Phone: $("#txtPhone").val(), 
       Ext: $("#txtExt").val(), 
       Address: $("#txtAddress").val(), 
       LocationID: allVals 
      }; 

現在出現的問題,當我給複選框:檢查的項目是不填充ModelData實體位置財產

圖片:

http://tinypic.com/r/eapem9/6

問題出現Posting form ... JQuery AJAX

圖片:

http://tinypic.com/r/4l0bqr/6

+0

<形式名稱= 「frmAddClient」 ID = 「frmAddClient」 方法= 「POST」 ENCTYPE = 「多部分/格式數據」> ... ... <按鈕類型= 「提交」 類=「BTN btn-primary「> 保存信息 – Sohail

回答

0

不幸的是你有沒有你怎麼調用控制器動作告訴我們。你可以嘗試把他們作爲一個JSON請求,它允許您張貼任意複雜的對象到您的控制器操作:

var allVals = []; 
$('#chkLocations:checked').each(function() { 
    allVals.push($(this).val()); 
}); 
var dataPacket = { 
    ClientName: $("#txtClientName").val(), 
    Phone: $("#txtPhone").val(), 
    Ext: $("#txtExt").val(), 
    Address: $("#txtAddress").val(), 
    LocationID: allVals 
}; 

然後:

$.ajax({ 
    url: '@Url.Action("AddClient", "SomeController")', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ client: dataPacket }), 
    success: function(result) { 
     // ... handle the result 
    } 
}); 

通知的JSON.stringify方法的使用,其原生內置到現代瀏覽器中以JSON字符串的形式發送請求。我們還將請求內容類型標頭設置爲application/json,以便應用程序使用適當的JSON值提供程序並將此請求解析到您的模型。

+0

這是我如何調用控制器動作url:」/ client/AddClient「 – Sohail

+0

這是錯誤的。你似乎已經對它進行了硬編碼。你永遠不應該在ASP.NET MVC應用程序中硬編碼URL。你應該總是使用url助手來構建它們。否則,當您將應用程序發佈到IIS中的虛擬目錄中時,它將停止工作。如果這是在一個單獨的JavaScript文件中,那麼你不能直接在這個文件中使用url助手,但你可以使用url助手在你的視圖中構建url,然後在你的javascript文件中使用它。 –

+0

當我把JSON.stringify(dataPacket),控制器parametter類的所有值變爲null:http://tinypic.com/r/2l8vt46/6 – Sohail