0

クライアント

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 Entity Locationプロパティが設定されません。

画像:

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

問題が発生します 投稿フォーム... JQuery AJAX

画像:

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

4

1 に答える 1

0

残念ながら、コントローラーアクションをどのように呼び出しているかを示していません。それらをJSONリクエストとして送信してみてください。これにより、任意の複雑なオブジェクトをコントローラーアクションにPOSTできます。

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値プロバイダーを使用し、このリクエストをモデルに解析できるように、リクエストコンテンツタイプヘッダーをに設定しています。

于 2012-10-01T16:01:23.803 に答える