Asp.net mvc BeginForm<;t控制器>;韩元';t柱模型第一轮
我在使用最新的mvc扩展时遇到了一个问题。我已经禁用了clientsidevalidation,因为我读到它可能仍然有一个bug。基本上,第一次发布模型时为空,第二次(以及之后的任何时间)将发布模型 如果我将其切换回@using(Html.BeginForm())或@using(Html.BeginForm)(“action”、“controller”等),它会起作用,但我更愿意使用强类型版本。以下是我的代码: 控制器Asp.net mvc BeginForm<;t控制器>;韩元';t柱模型第一轮,asp.net-mvc,razor,html.beginform,Asp.net Mvc,Razor,Html.beginform,我在使用最新的mvc扩展时遇到了一个问题。我已经禁用了clientsidevalidation,因为我读到它可能仍然有一个bug。基本上,第一次发布模型时为空,第二次(以及之后的任何时间)将发布模型 如果我将其切换回@using(Html.BeginForm())或@using(Html.BeginForm)(“action”、“controller”等),它会起作用,但我更愿意使用强类型版本。以下是我的代码: 控制器 [HandleError] public class HomeControl
[HandleError]
public class HomeController : BaseServiceController<IUserService>
{
public HomeController(IUserService service, IMapper mapper, ICustomPrincipal user)
: base(service, mapper, user)
{}
[AllowAnonymous]
[HttpGet]
public ActionResult Logon(string ReturnUrl)
{
LogonModel model = new LogonModel() { ReturnUrl = ReturnUrl };
return View(model);
}
[AllowAnonymous]
[HttpPost]
public ActionResult Logon(LogonModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
SfUser sfUser = service.Logon(model.UserName, model.Password);
if (sfUser == null)
{
ModelState.AddModelError("General", "Username or Password incorrect");
return View(model);
}
Response.Cookies.Add(TicketMaster.setAuthCookie(new CustomPrincipalSerializeModel(sfUser)));
return Redirect(model.ReturnUrl);
}
[HandleError]
公共类HomeController:BaseServiceController
{
公共家庭控制器(IUserService服务、IMapper映射器、ICustomPrincipal用户)
:base(服务、映射器、用户)
{}
[异名]
[HttpGet]
公共操作结果登录(字符串返回URL)
{
LogonModel model=new LogonModel(){ReturnUrl=ReturnUrl};
返回视图(模型);
}
[异名]
[HttpPost]
公共操作结果登录(LogonModel模型)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
SfUser SfUser=service.Logon(model.UserName、model.Password);
if(sfUser==null)
{
AddModelError(“常规”、“用户名或密码不正确”);
返回视图(模型);
}
Add(TicketMaster.setAuthCookie(新的CustomPrincipalSerializeModel(sfUser));
返回重定向(model.ReturnUrl);
}
看法
@model LogonModel
@{
ViewBag.Title=“登录”;
}
//@使用(Html.BeginForm())//Works
@使用(Html.BeginForm(c=>c.Logon(Model)))
{
@HiddenFor(m=>m.ReturnUrl)
@LabelFor(m=>m.UserName)
@Html.TextBoxFor(m=>m.UserName)
@Html.ValidationMessageFor(m=>m.UserName)
@LabelFor(m=>m.Password)
@Html.PasswordFor(m=>m.Password)
@Html.ValidationMessageFor(m=>m.Password)
@Html.ValidationSummary(true)
}
如果它总是发布一个空模型,但只有在第一次发布时才发布,我可以理解这个问题。这让我很恼火。我知道这很旧,可能已经以某种方式解决了,但是你应该将
null
而不是model
传递给表达式。这样,模型将使用表单值构建
我花了几个小时。转到强类型Html
部分。这是关键点:
您希望在窗体的范围内传递值,而不是
beginfound方法本身
对你来说,只要换衣服就行了
@using(Html.BeginForm<HomeController>(c => c.Logon(Model)))
@使用(Html.BeginForm(c=>c.Logon(Model)))
到
@使用(Html.BeginForm(c=>c.Logon(null)))
@using(Html.BeginForm<HomeController>(c => c.Logon(Model)))
@using(Html.BeginForm<HomeController>(c => c.Logon(null)))