模型没有在 asp.net mvc 中使用 ajax post 更新?

Posted

技术标签:

【中文标题】模型没有在 asp.net mvc 中使用 ajax post 更新?【英文标题】:Model is not updated with ajax post in asp.net mvc? 【发布时间】:2017-08-04 12:32:26 【问题描述】:

我正在使用 asp.net mvc 应用程序。 在我的视图页面中,我有如下代码的文本框:

@html.TextBoxFor(m => m.Id, new  @class = "form-control", @readonly = "readonly" )

另外,在表单中提交 ajax 帖子,

$('#btnSubmit').click(function(e)
    
        $.ajax(
            url: '/button/Button',
            type: 'POST',
            data: Id:1,
           );
    );

我的控制器:

 MasterM empcode = new MasterM();

        [HttpGet]
        public ActionResult Button()
        

            var empcode = new MasterM();

            return View(empcode);
         

        [HttpPost]
        public  ActionResult Button(MasterM model)
        
            ModelState.Clear();
            if (!ModelState.IsValid)
            
                return View(model);
            
            return View(model);
        

此表单提交后,文本框的值应更改为新值 (1)。我怎样才能在控制器部分本身实现这一点。 我知道在 ajax 成功中我们可以手动更新元素值,但我想在控制器部分实现这一点并使用新值更新模型。

【问题讨论】:

为什么要发送ajax调用,只做普通形式的post 您的模型正在控制器中更新(Id 的值是 1 是 POST 方法)。如果您想更新文本框,请使用 javascript,或者使用您在成功回调中返回的视图更新 DOM 不,我需要 ajax 调用用于其他目的 @StephenMuecke,这里的示例我直接给出了 1,但在实际情况下,它会因其他一些操作而改变 如果要返回整个视图,使用 ajax 毫无意义! 【参考方案1】:

当您发布时,您仅发送单个 ID 而不是整个模型, 所以基本上这个

public  ActionResult Button(MasterM model) will be empty 

并且由于您返回的是空集,因此文本框将不会更新。

您可以在这里做两件事: 1)修改接收类型为

 Public  ActionResult Button(int Id)
    
    MasterM model = new MasterM();
    model.Id = Id;
     if (!ModelState.IsValid)
                
                    return View(model);
                
                return View(model);
    

2) 如果你想在 Controller 中保留 Model 作为你的 Param 您需要在 Jquery 中序列化数据并发布。

【讨论】:

以上是关于模型没有在 asp.net mvc 中使用 ajax post 更新?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net mvc 使用Ajax调用Action 返回数据。

asp.net mvc 使用Ajax调用Action 返回数据

asp.net mvc 使用Ajax调用Action 返回数据

在 ASP.NET MVC 5 中搭建外部模型

请参阅 C# 中的 ASP.NET MVC 索引页面,使用 URL 中没有 ID 的模型中的数据填充

asp.net mvc 中模型验证如何处理数组呢?