Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Mvc 5 - Fatal编程技术网

C# Ajax使用空模型调用控制器操作

C# Ajax使用空模型调用控制器操作,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,单击“更新名称”按钮时,将调用UpdateDetails操作,但Customer模型参数对于所有属性均为空。为什么会这样 控制器: public class CustomerController : Controller { public ActionResult Index(int id) { Customer customer = GetCustomer(id); return View(customer); } [Http

单击“更新名称”按钮时,将调用
UpdateDetails
操作,但
Customer
模型参数对于所有属性均为空。为什么会这样

控制器:

public class CustomerController : Controller
{
    public ActionResult Index(int id)
    {
        Customer customer = GetCustomer(id);

        return View(customer);
    }

    [HttpPost]
    public PartialViewResult UpdateDetails(Customer customer)
    {
        UpdateCustomer(customer);

        return PartialView("CustomerUpdateResult", true);
    }
}
@model MvcTest.Models.Customer

@using (Ajax.BeginForm("UpdateDetails", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "CustomerUpdateResultDiv" }))
{
    @Html.TextBoxFor(cust => cust.Name)
    <input type="submit" value="Update Name" />
}

<div id="CustomerUpdateResultDiv"></div>
查看摘录:

public class CustomerController : Controller
{
    public ActionResult Index(int id)
    {
        Customer customer = GetCustomer(id);

        return View(customer);
    }

    [HttpPost]
    public PartialViewResult UpdateDetails(Customer customer)
    {
        UpdateCustomer(customer);

        return PartialView("CustomerUpdateResult", true);
    }
}
@model MvcTest.Models.Customer

@using (Ajax.BeginForm("UpdateDetails", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "CustomerUpdateResultDiv" }))
{
    @Html.TextBoxFor(cust => cust.Name)
    <input type="submit" value="Update Name" />
}

<div id="CustomerUpdateResultDiv"></div>
@model MvcTest.Models.Customer
@使用(Ajax.BeginForm(“UpdateDetails”,新的AjaxOptions{HttpMethod=“POST”,UpdateTargetId=“CustomerUpdateResultDiv”}))
{
@Html.TextBoxFor(cust=>cust.Name)
}
假设您没有任何其他代码劫持您的单击事件并执行其他操作,上述代码(有问题)应该可以正常工作,不会出现任何问题

但是您将只获得name属性值,因为表单中只有该值。因此,所有其他属性都将为null。您可以在表单中包含更多属性,或者再次读取customer对象,并在保存之前仅设置更新的属性值

@using (Ajax.BeginForm("UpdateDetails", new AjaxOptions { HttpMethod = "POST", 
                                   UpdateTargetId = "CustomerUpdateResultDiv" }))
{
    @Html.TextBoxFor(cust => cust.Name)
    @Html.HiddenFor(c=>c.CustomerID)
    <input type="submit" value="Update Name" />
}
假设您没有任何其他代码劫持您的点击事件并执行其他操作,上述代码(有问题)应该可以正常工作,没有任何问题

但是您将只获得name属性值,因为表单中只有该值。因此,所有其他属性都将为null。您可以在表单中包含更多属性,或者再次读取customer对象,并在保存之前仅设置更新的属性值

@using (Ajax.BeginForm("UpdateDetails", new AjaxOptions { HttpMethod = "POST", 
                                   UpdateTargetId = "CustomerUpdateResultDiv" }))
{
    @Html.TextBoxFor(cust => cust.Name)
    @Html.HiddenFor(c=>c.CustomerID)
    <input type="submit" value="Update Name" />
}

检查
ModelState.IsValid
标志。如果为false,则存在一个错误集合,该集合将告诉您错误所在,您应该将模型返回到视图中,以便可以呈现验证消息。请在chrome/firefox(firebug)的“网络”选项卡下进行检查,查看传递的所有post参数是什么?该参数为空是什么意思?它为null或者Id属性可能为0?问题中的代码工作正常。也许你的项目中还有其他东西不在这里,给你带来麻烦。甚至是名字?或者,您的意思是除了name之外,所有属性都为null?请检查
ModelState.IsValid
标志。如果为false,则存在一个错误集合,该集合将告诉您错误所在,您应该将模型返回到视图中,以便可以呈现验证消息。请在chrome/firefox(firebug)的“网络”选项卡下进行检查,查看传递的所有post参数是什么?该参数为空是什么意思?它为null或者Id属性可能为0?问题中的代码工作正常。也许你的项目中还有其他东西不在这里,给你带来麻烦。甚至是名字?或者,您的意思是,除了名称之外,所有属性都为空?