C# 未接收从视图到控制器的值

C# 未接收从视图到控制器的值,c#,asp.net,ajax,asp.net-mvc,razor,C#,Asp.net,Ajax,Asp.net Mvc,Razor,我的看法是: @using (Html.BeginForm("RegisterNewUser ", "RegisterUser", new { @class = "registerForm" })) { @Html.LabelFor(model => model.nickName) @Html.TextBoxFor(model => model.nickName, new { @class = "RegisterControls" }) <br /&g

我的看法是:

 @using (Html.BeginForm("RegisterNewUser ", "RegisterUser", new { @class = "registerForm" }))
{
    @Html.LabelFor(model => model.nickName)
    @Html.TextBoxFor(model => model.nickName, new { @class = "RegisterControls" })
    <br /><br />

    @Html.LabelFor(model => model.email)
    @Html.TextBoxFor(model => model.email, new { @class = "RegisterControls" })
    @Html.ValidationMessageFor(model => model.email)
    <br /><br />

    @Html.LabelFor(model => model.password)
    @Html.PasswordFor(model => model.password, new { @class = "RegisterControls", id = "firstPassword" })
    <br /><br />

    @Html.LabelFor(model => model.confirmPassword)
    @Html.PasswordFor(model => model.password, new { @class = "RegisterControls" })
    @Html.ValidationMessageFor(model => model.confirmPassword)
    <br /><br /><br />
    <hr style="color: #D5E0EE; border: solid; border-style: double;" />

    @Ajax.ActionLink("Create account", "RegisterNewUser", "RegisteredUsers", new AjaxOptions { UpdateTargetId = "updaterDiv", HttpMethod = "POST" }, new { @class = "actionButtons" })
    <br /><br />
当我在Action方法上设置断点时,我看到所有三个参数都为null,即使它们是在文本框中提供的。我错过了什么。我还可以添加模型代码,但我想这还不相关,因为它还没有涉及

-------------------------------------更新----------------------------------

嗨。我在视图中引入了一个提交按钮,并删除了Ajax ActionLink。因此,视图现在包含以下内容:

<input type="submit" value="Register" onclick="@Url.Action("RegisterNewUser", "RegisterUsers");" class="actionButtons" />
问题是相同的,值仍然为空。这次设置断点时,我注意到submit按钮没有调用Action方法。单击submit按钮时实际上什么都不做。我也尝试过不添加onclick事件监听器,正如我在一些示例中看到的,但结果保持不变

如果需要,模型如下所示:

[HttpPost]
    public ActionResult RegisterNewUser(RegisteredUsers registerUserModel)
    {
        ViewBag.Message = "Register";
        string msg = "";

        if (!users.RegisterUser(registerUserModel.nickName, registerUserModel.email, registerUserModel.password))
        {
            msg = "The provided email already exists";
        }
        return PartialView("_Register");            
    }
public class RegisteredUsers
{
    private DBLogic logic;

    [Display(Name ="Your Email")]
    [Required(ErrorMessage="You must provide a valid Email")]
    [EmailAddress]
    public string email { get; set; }

    [Required(ErrorMessage="Select a user name", AllowEmptyStrings = false)]
    [Display(Name="User name")]
    public string nickName { get; set; }

    [Required(ErrorMessage="Select a password", AllowEmptyStrings = false)]
    [Display(Name="Password")]
    [DataType(DataType.Password)]
    public string password { get; set; }

    [Required(ErrorMessage="Type your password again")]
    [Display(Name="Confirm password")]
    [DataType(DataType.Password)]
    [Compare("Password", ErrorMessage="The two passwords do not match")]
    public string confirmPassword { get; set; }

    [Display(Name="Remember me")]
    public bool rememberUserOnThisComputer { get; set; }
public void ...
[HttpPost]
public ActionResult RegisterNewUser(RegisterModel model)
{
    ViewBag.Message = "Register";
    string msg = "";

    if (!users.RegisterUser(model.uName, model.email, model.password))
    {
        msg = "The provided email already exists";
    }

    ViewBag.Message = msg;
    return PartialView("_Register");            
}

您应该使用
Ajax.BeginForm
来代替普通的输入按钮

@using (Ajax.BeginForm("RegisterNewUser ", "RegisterNewUser ", new AjaxOptions { UpdateTargetId = "result" }))    
{
  <div id="result"></div>
  ...form data
  <input type="submit" value="Ajax Form Action" />
}

您有
Html.BeginForm()
。您需要一个提交按钮-
并删除
Ajax.ActionLink()
。由于您有一个模型,您应该发回模型-
public ActionResult RegisterNewUser(您的模型)
,而不是值类型。如果您想保持在同一页面上,请使用
Ajax.BeginForm()
而不是
Html.BeginForm()
Re:您的编辑。不要在单击时添加
onclick
。它只需要是
,并且您也使用了错误的
BeginForm()
重载-您设置的路由值
class=registerForm
,而不是html属性。这意味着我设置的是路由值而不是html属性是什么?应该是怎样的呢?看看你在表单标签中生成的html来理解。各种重载是我对asp.NETMVC很新,你们给我的信息是无价的。谢谢你。回到代码。。。如果Html.BeginForm不发送值,它有什么用?什么时候它比其他的更受欢迎?@user1960836没问题
Html.BeginForm
用于没有Ajax的传统帖子。这篇文章比较了两者,值得一读@user1960836,Html.BeginForm会发布这些值——只是您没有提交按钮。
[HttpPost]
public ActionResult RegisterNewUser(RegisterModel model)
{
    ViewBag.Message = "Register";
    string msg = "";

    if (!users.RegisterUser(model.uName, model.email, model.password))
    {
        msg = "The provided email already exists";
    }

    ViewBag.Message = msg;
    return PartialView("_Register");            
}