我找了很长时间来解决这个问题,但我还没有找到任何东西。我已将强类型定义为我正在使用的控制器/视图的模型;问题是模型引用了其他复杂类型,所以我需要部分更新该模型的部分。例如,在页面的一个选项卡中,我部分获得了另一个视图,该视图带来了带有一些选择的网格;另一部分带来另一部分;所以在用户选择他们的选项并提交后,我需要将所有这些小块发送到 post 操作。
我已经创建了我需要的 JSON 对象并将其发送到控制器。在行动中,我成功获得了模型,但 JSON 并没有出现在行动中。那么如何将该 JSON 作为控制器操作的附加参数传递给视图呢?
我也已经用提琴手检查了请求,并且正在发送 JSON。对象是否在特殊集合中传递?
当然。视图期望或被强类型化为模型,在这种情况下是“提供者”实体。这个实体有原始类型和复杂类型。因为实体仍在创建过程中,所以当达到创建后操作时,我需要传递部分对象来完成实体。这是模型的一部分:
public class Provider2 : IProvider
{
public int Id { get; set; }
public bool IsApproved { get; set; }
public string RejectionNotes { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string Email { get; set; }
public int OfficeAddressId { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Chain> ProviderChain { get; set; }
public virtual ICollection<ProviderContact> ProviderContacts { get; set; }
public virtual ICollection<ExaminationPrice> ExaminationPrices { get; set; }
}
整数、字符串等简单类型没有问题。如您所见,有集合和复杂类型,这些类型是从部分视图中检索的,并且那一刻是单独的实体,因此我需要在提交时将它们包装在 json 或其他对象(例如 JSON)中并获取它达到创建动作的那一刻:
[HttpPost]
public ActionResult Create(Provider provider, Another object to be passed???)
{
if (ModelState.IsValid)
{
_repository.Save(provider);
return RedirectToAction("Index");
}
return View(provider);
}
原始类型和地址属性在模型上映射,所以它们没有问题,但集合没有映射,所以这就是我尝试传递一个附加对象(如 json)来包装纯 HTML 中的所有部分的原因到 javascript 对象,因为它们没有直接映射到模型。
所以,通过这个 javascript 我将我需要的数据发送到视图并发送它,但显然该操作没有接收到 json 对象。
$(function () {
$("#ButtonSave").click(function () {
var prices = getPrices();
if (prices != null) {
$.ajax({
url: '/Provider/Create',
type: 'POST',
dataType: 'json',
data: prices,
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert('Success');
}
});
}
});
});
function getPrices() {
var elements = '[';
var rows = $("#selectedElementsGrid tr.selectable").each(function () {
var idValue = '{price : { "Id":' + $(this).find(".id").val() + ',';
var nameValue = ' "Name":"' + $(this).find(".name").text() + '",';
var priceValue = ' "Price":"' + $(this).find(".price").val() + '"} },';
elements = elements + idValue + nameValue + priceValue;
});
elements = elements.substring(0, elements.length - 1) + ']';
return JSON.stringify(elements);
}
提前致谢!