Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AJAX将实体框架表单作为模型发送给控制器_C#_Jquery_Ajax_Asp.net Mvc_Entity Framework Core - Fatal编程技术网

C# 使用AJAX将实体框架表单作为模型发送给控制器

C# 使用AJAX将实体框架表单作为模型发送给控制器,c#,jquery,ajax,asp.net-mvc,entity-framework-core,C#,Jquery,Ajax,Asp.net Mvc,Entity Framework Core,我在尝试通过ajax将实体框架表单作为模型发送到控制器时遇到了一个问题。问题是,在某些情况下,它不会传递空模型。以下是我所拥有的: 制造商.cs 汽车公司 Manufacturers.cshtml 控制器 因此,在填写制造商表格并提交$form.serialize的情况下,ManufacturerID=0&Name=Toyota。控制器操作接收一个具有给定值的完整模型,我可以使用实体框架将该模型添加到数据库中 当试图对汽车进行同样的操作时,问题就来了。我填写表格并提交$form.serializ

我在尝试通过ajax将实体框架表单作为模型发送到控制器时遇到了一个问题。问题是,在某些情况下,它不会传递空模型。以下是我所拥有的:

制造商.cs

汽车公司

Manufacturers.cshtml

控制器

因此,在填写制造商表格并提交$form.serialize的情况下,ManufacturerID=0&Name=Toyota。控制器操作接收一个具有给定值的完整模型,我可以使用实体框架将该模型添加到数据库中

当试图对汽车进行同样的操作时,问题就来了。我填写表格并提交$form.serialize给出了CarID=0&Model=Camry&ManufacturerID=1&Year=2010&Mpg=24.4这样的内容。在这种情况下,控制器操作接收一个空模型,任何值字段为0,字符串字段为null

对创建的DOM元素的进一步检查表明,为Manufacturer创建的表单有一个以value=0>结尾的ManufacturerID隐藏输入字段,而为CarID创建的相同隐藏输入具有属性value>。不确定这是否是一个问题,但我认为这是值得注意的


我需要知道为什么我收到的是制造商的完整模型,而不是汽车的完整模型。

假设您打算在控制器中发布CreateCarCar模型操作方法

当您发布的表单数据中有一个名为model的项时,这看起来像是默认模型绑定器中的一个bug。如果您发布的数据没有带有键模型的FormData项,则模型绑定工作正常,因此您的制造商表单适合您

如果将属性名称从Model更改为ModelName,则应该可以正常工作


了解更多信息后,我将发布此答案的更新。

我假设您的控制器有CreateCarCar型号?而Cars.cshtml的id=car表单不是id=manufacturer表单?虽然后者不能解释问题。是的,我会解决。谢谢,就是这样。谢谢@Shyju您知道这是因为控制器操作中的我的参数名为“model”,还是“model”在实体框架中是一种保留字的问题?不知道。这是因为您的表单数据有一个带有键model的项。因此,如果在制造商表单中包含一个输入元素,即使您使用Car作为操作方法的参数,也不会起作用。我为此提交了asp.net mvc回购协议,当我听到这些人的消息时,我会更新答案。
public class Manufacturer 
{
    [HiddenInput(DisplayValue = false)]
    public int ManufacturerID { get; set; }

    public string Name { get; set; }
}
public class Car
{
    [HiddenInput(DisplayValue = false)]
    public int CarID { get; set; }

    public string Model { get; set; }
    public int ManufacturerID { get; set; }
    public int Year { get; set; }
    public decimal Mpg { get; set; }
}
<div id="manufacturer-list">
    @Html.Partial("ManufacturerList")
</div>
<div id="manufacturer-form">
    @Html.Partial("ManufacturerForm")
</div>
@model Manufacturer

<form id="create-manufacturer-form" method="post">
    @Html.EditorForModel()
    <a onclick="CreateEntity('@Url.Action("CreateManufacturer", "Home")', 'manufacturer')">Add Manufacturer</a>
</form>
<div id="car-list">
    @Html.Partial("CarList")
</div>
<div id="car-form">
    @Html.Partial("CarForm")
</div>
@model Car

<form id="create-car-form" method="post">
    @Html.EditorForModel()
    <a onclick="CreateEntity('@Url.Action("CreateCar", "Home")', 'car')">Add Car</a>
</form>
function CreateEntity(createAction, modelType) {
    var $form = $('#create-' + modelType + '-form');

    $.ajax({
        type: "POST",
        url: createAction,
        data: $form.serialize(),
        dataType: 'html',
        success: function (data) {
            //do stuff
        }
    });
}
public class HomeController : Controller
{
    private readonly CarsDbContext _context;

    public HomeController(CarsDbContext context)
    {
        _context = context;
    }

    [HttpPost]
    public IActionResult CreateManufacturer(Manufacturer model)
    {
        //do stuff
    }

    [HttpPost]
    public IActionResult CreateCar(Car model)
    {
        //do stuff
    }
}
public class Car
{
    [HiddenInput(DisplayValue = false)]
    public int CarID { get; set; }

    public string ModelName { get; set; }
    public int ManufacturerID { get; set; }
    public int Year { get; set; }
    public decimal Mpg { get; set; }
}