C# 从Ajax(BeginForm)向控制器传递模型时,模型始终为空
我对来自Java/Spring的C#ASP.NETMVC的东西还不熟悉。我目前在将模型绑定到表单并将其传递时遇到问题。它总是以null的形式进入控制器。我试过各种各样的方法,但都没有用。一定很简单,我做错了。有什么想法吗 //看法C# 从Ajax(BeginForm)向控制器传递模型时,模型始终为空,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我对来自Java/Spring的C#ASP.NETMVC的东西还不熟悉。我目前在将模型绑定到表单并将其传递时遇到问题。它总是以null的形式进入控制器。我试过各种各样的方法,但都没有用。一定很简单,我做错了。有什么想法吗 //看法 @model BensHub.Models.VisitorMessage @using (Ajax.BeginForm( "PostMessage", "VisitorBoard",
@model BensHub.Models.VisitorMessage
@using (Ajax.BeginForm(
"PostMessage",
"VisitorBoard",
new AjaxOptions { HttpMethod = "POST" }))
{
@Html.TextBoxFor(msg => msg.Name, new { @class = "board-
field", @style = "margin-top:8px;", @minlength
="1",maxlength = "28", placeholder ="Name" })
@Html.TextAreaFor(msg => msg.Message, new { @class =
"board-field", @rows = "4", @minlength = "1", @maxlength =
"128", @placeholder = "Something nice?", })
<input class="board-submit" type="submit" value="Say It"/>
}
//路线
routes.MapRoute(
"MessagePost",
"VisitorBoard/PostMessage",
new { controller = "VisitorBoard", action = "PostMessage" }
);
//模型
namespace BensHub.Models
{
public class VisitorMessage
{
[Key]
public int Id { get; set; }
public DateTime DateTime { get; set; }
[Required]
[StringLength(28, MinimumLength = 1)]
public string Name { get; set; }
[Required]
[StringLength(128, MinimumLength = 1)]
public string Message { get; set; }
}
}
我将您提供的代码复制并粘贴到一个新项目中,它可以正常工作!您没有在此处发布的内容是导致问题的原因。我会仔细检查您的路线,我的路线设置如下:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"MessagePost",
"VisitorBoard/PostMessage",
new { controller = "VisitorBoard", action = "PostMessage" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
路径的顺序将影响哪个路径会被击中,如果我要交换底部两条路径的顺序,则会调用不同的操作我建议您在输入参数之前添加
[FromBody]
属性:
public class VisitorBoardController : Controller
{
[HttpPost]
public ActionResult PostMessage([FromBody] VisitorMessage message)
{ // ...
}
}
好吧,我为所有感兴趣的人解决了这个问题
[HttpPost]
public ActionResult PostMessage(VisitorMessage message)
动作参数“message”与发送模型绑定器等的模型中同名的属性冲突。只需将其重命名为其他名称或属性名称。添加jquery.unobtrusive-ajax.min.jsYep@Scripts.Render(“~/bundles/jquery”)@Scripts.Render后,您的代码看起来没问题(“~/bundles/jqueryOutrusive”)@Scripts.Render(“~/bundles/jqueryval”)-这包括用于不引人注目的ajax的脚本,如果您确定已正确映射对象的
属性
,则还可以尝试使用公共操作结果PostMessage([FromBody]VisitorMessage)
。奇怪的是,如果我使用了您的映射,那么它甚至没有击中控制器,ajax请求中的操作url只是localhost:49397/并且什么也不做。这些值似乎输入到模型状态,但也设置为invalidAh抱歉,我的帖子不清楚,我将它指向我的HomeController。如果您将其作为第一个route它应该可以解决您的问题,我认为:routes.MapRoute(“MessagePost”,“VisitorBoard/PostMessage”,new{controller=“VisitorBoard”,action=“PostMessage”});
这没有任何区别,仍然是空的!嗯
[HttpPost]
public ActionResult PostMessage(VisitorMessage message)