1

我在注册页面上有一个带有提交按钮的表单,按下时无法使用,已经使用了一段时间了吗?我在 creat 方法上放了一个断点,它没有被调用

这是控制器中的创建方法

   public ActionResult Create()
    {
        return View();
    }

    //
    // POST: /RegsterDetails/Create

    [HttpPost]
    public ActionResult Create(User user )
    {
        if(ModelState.IsValid)
        try
        {
            db.Users.Add(user);
            db.SaveChanges();
            return RedirectToAction("RegisterStats", "RegisterStats");
        }
        catch(Exception)
        {
            return View();
        }
        return View(user);

这是视图

    @model Fitness_Friend.Web.Models.User

@{
    ViewBag.Title = "RegisterDetails";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>RegisterDetails</h2>

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>User</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.LastName)
            @Html.ValidationMessageFor(model => model.LastName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DOB)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DOB)
            @Html.ValidationMessageFor(model => model.DOB)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Address)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address)
            @Html.ValidationMessageFor(model => model.Address)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Gender)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Gender)
            @Html.ValidationMessageFor(model => model.Gender)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>

        <p>
            <input type="Submit" name="Create" value="Register Details" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index","Home")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
4

4 回答 4

2

出于某种原因,您的表单没有正确连接到您的操作。为了消除正在发生的事情的一些可能性,我建议您实际指定表单将用于发布的 Action 和 Controller。

@Html.BeginForm("CreateUser", "ControllerWithCreateUserMethod")
{
    //insert your HTML here.
    //submit button here
    <input type="submit" value="Submit"/>
}
于 2013-08-11T17:12:10.430 回答
1

在 HTML 表单中,您需要一个提交按钮来发布数据,如下所示

<input type="submit" value="Submit"/>

或者

<button type="submit">Submit</button>

如果你不喜欢这些,你可以选择这样的东西

<a onclick="$('#formId').submit();">Submit</a>

当然,您可以选择在表单标签中指定要发布数据的位置

@Html.BeginForm("Action", "Controller")
{
   ...
}
于 2013-08-11T17:24:03.817 回答
1

我已经复制了这段代码,如下所示:

控制器 + 模型(糟糕的设计不要这样做):

public class HomeController : Controller
{
    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(MyUser user)
    {
        // break point next line works
        if (ModelState.IsValid)
            try
            {
                //db.Users.Add(user);
                //db.SaveChanges();
                return RedirectToAction("RegisterStats", "RegisterStats");
            }
            catch (Exception)
            {
                return View();
            }
        return View(user);
    }

    public class MyUser
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

有了这个观点:

@model MvcApplication3.Controllers.HomeController.MyUser

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>User</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.LastName)
            @Html.ValidationMessageFor(model => model.LastName)
        </div>

        <p>
            <input type="Submit" name="Create" value="Register Details" />
        </p>
    </fieldset>
}

它可以毫无问题地工作。

于 2013-08-11T17:52:00.817 回答
0

我很晚了,但我想我知道为什么这个控制器方法没有被调用。

如果表单将模型的数据传递回控制器,则模型类需要有一个不带参数的构造函数。我敢打赌,在上面的例子中,类 User 没有这样的构造函数。

于 2014-11-28T15:12:19.363 回答