【问题标题】:ASP.NET MVC form won't postASP.NET MVC 表单不会发布
【发布时间】:2011-01-15 17:26:18
【问题描述】:

我有一个非常简单的控制器和视图,用于显示和编辑用户配置文件数据。

问题是表单不会发布。我看不到问题...

代码如下:

<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>

<% using (Html.BeginForm()) {%>
<div>
    <fieldset>
        <p>
            <label for="Title">
                Title:</label>
            <%= Html.TextBox("Title", Model.Title) %>
            <%= Html.ValidationMessage("Title", "*") %>
        </p>
        <p>
            <label for="FirstName">
                FirstName:</label>
            <%= Html.TextBox("FirstName", Model.FirstName)%>
            <%= Html.ValidationMessage("FirstName", "*") %>
        </p>
        <p>
            <label for="LastName">
                LastName:</label>
            <%= Html.TextBox("LastName", Model.LastName)%>
            <%= Html.ValidationMessage("LastName", "*") %>
        </p>
    </fieldset>
    <fieldset>
        <legend>Contact with the Encephalitis Society</legend>
        <p>
            <label for="Contactable">
                Allow The Encephalitis Society to contact me (we will not contact you unless this
                is checked):</label>
            <%= Html.CheckBox("Contactable", Model.Contactable)%>
            <%= Html.ValidationMessage("Contactable", "*") %>
        </p>
        <p>
            <label for="SubscribeNewsletter">
                I would like to receive e-newsletters:</label>
            <%= Html.CheckBox("SubscribeNewsletter", Model.SubscribeNewsletter)%>
            <%= Html.ValidationMessage("SubscribeNewsletter", "*") %>
        </p>
        <p>
            <label for="wantMembershipInfoPackage">
                I would like more information about becoming a member of the Encephalitis Society:</label>
            <%= Html.CheckBox("wantMembershipInfoPackage", Model.IsMember)%>
            <%= Html.ValidationMessage("wantMembershipInfoPackage", "*")%>
        </p>
        <p>
            <label for="IsMember">
                I am already a member of the Encephalitis Society:</label>
            <%= Html.CheckBox("IsMember", Model.IsMember)%>
            <%= Html.ValidationMessage("IsMember", "*") %>
        </p>
        <p>
            <label for="wantToBeRegularDonor">
                I would like to make a regular donation to the Encephalitis Society:</label>
            <%= Html.CheckBox("wantToBeRegularDonor", Model.IsMember)%>
            <%= Html.ValidationMessage("wantToBeRegularDonor", "*")%>
        </p>
    </fieldset>
    <hr />
    <%=Html.ActionLink("Cancel (Return to My Page)", "MyPage", "Members", null, new { @class = "LinkButton LeftButton" })%>
    <input class="LinkButton RightButton" type="submit" value="Save" />
</div>
<% } %>

控制器如下:

public class ProfileController : Controller
{

    WebProfile p = WebProfile.Current;
    Member member = new Member();

    // GET: Shows details of the Profile
    public ViewResult Show()
    {
        ViewData["CategoryRole"] = member.CategoryRoleUserFriendly;
        return View(p);
    }

    // GET: /Profile/New - displays a template to create the Profile
    public ViewResult New()
    {
        ViewData["SaveButtonText"] = "Next >>";
        return View(p);
    }

    // POST: /Profile/New
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult New(FormCollection formValues)
    {
        try
        {
            WebProfile.GetProfile(member.UserName);
            UpdateModel(p);
            return RedirectToAction("MyPage", "Members");
        }
        catch
        {
            ViewData["SaveButtonText"] = "Next >>";
            return View();
        }
    }

    // GET: /Profile/Edit - displays a template to create the Profile
    public ViewResult Edit()
    {
        ViewData["SaveButtonText"] = "Save >>";
        return View(p);
    }

    // POST: /Profile/Edit - displays a template to create the Profile
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(FormCollection formValues)
    {
        try
        {
            WebProfile.GetProfile(member.UserName);
            UpdateModel(p);
            return RedirectToAction("Show");
        }
        catch
        {
            return View();
        }
    }
}

}

有什么东西在你身上跳出来吗?

【问题讨论】:

  • 如果你把你的动作名称放在 Html.BeginForm() 中会发生什么?

标签: html asp.net-mvc forms post


【解决方案1】:

我已经解决了,这是一个很小的问题,我将在这里详细说明:

问题是缺少引号 ("),如下所示:

    <p class="Note>PLEASE NOTE: All items below are Optional</p>
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>

<% using (Html.BeginForm()) {%>
<div>
    <fieldset>
        ...

你能认出来吗?别担心,我花了一天时间:

<p class="Note>...

应该是:

<p class="Note">

之前缺少的引号足以破坏表单 POST 操作。没有错误,代码颜色没有变化。没有视觉指示。什么都没有。

要记住的!:

如果您的表单无法发布,请在 Html.BeginForm() 行上方查找格式错误的 html。

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 2023-04-09
    • 2011-08-21
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    相关资源
    最近更新 更多