【问题标题】:MVC 4 Razor + jquery mobile can't "POST" on form submitMVC 4 Razor + jquery mobile 无法在表单提交时“发布”
【发布时间】:2013-01-18 20:17:47
【问题描述】:

我是 ASP.NET MVC 4 的新手,我正在尝试在 jquery mobile 上创建一个简单的登录表单。 我想用 Razor 创建一个简单的 jquerymobile MVC 4 页面,当用户单击提交时,该页面将“发布”。

但每次我单击“登录”按钮(即提交按钮)时,它都会继续执行我的控制器中的“获取”操作。

并且萤火虫也将请求显示为“GET”,请帮助给我一些关于我做错了什么的指导。 :(

以下是我的代码,提前谢谢你。

我的观点

@model com.mywebsite.Models.LoginModel

<div data-role="page" data-theme="a" id="main">
            <div data-role="header" id="topbar" data-theme="b">
                <a href="index.html" class="back" data-direction="reverse"></a>
                <div class="header_title">Login</div>
            </div>

  <div data-role="content" data-theme="e"  id="content">
@using (Html.BeginForm("Login", "User", FormMethod.Post, new Dictionary<string,Object> { {"enctype","multipart/form-data"}, {"data-ajax","false"}}))
{
    @Html.ValidationSummary(true, "Login failed. Check your login details.");    

    <fieldset>    
    <div class="container1 " >
    <div class="fblogin"></div>
    <div class="or">Or</div>
  <div class="container1_1">
  <legend>Login</legend>
        <div  class="textwrapper grid">
            <div class="leftcolumn"><label for="name">Email:</label></div>
            <div class="leftcolumn">                
                @Html.TextBoxFor(u => u.UserName, new Dictionary<string,Object> { {"data-theme","d"}, {"id","e"}, {"type","email"}, {"size","20"}})

            </div>
        </div>
     </div>   
        <div  class="textwrapper container1_1">
            <div class="leftcolumn"><label for="password">Password:</label></div>
            <div class="leftcolumn">
                @Html.PasswordFor(u => u.Password, new Dictionary<string,Object> { {"data-theme","d"}, {"id","p"}, {"type","password"}})
            </div>
        </div>    
    </div>   
    <input type="submit" value="Log In" rel="external" data-ajax="false" />

  <div class="fpwd"><a href="index.html" data-theme="d">Forgot Password?</a></div>
  <div class="container1">
          <div class="container1_1">
        <legend>Don't have an account yet?</legend>
        <ul data-role="listview" data-inset="true" data-theme="d" class="nopadding">
        <li ><a href="signup.html"><div class="icon_signup_list"></div>Register</a></li>
        </ul>
        </div>
  </div>
        </fieldset>
}  
<!-- end content-->
</div>

@Html.Partial("~/Views/Shared/_Footer.cshtml")
<!--end page-->
</div>

我的模型(与默认的 MVC 应用程序模板相同)

public class LoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

我的控制器

public class UserController : Controller
{        
    // GET: /User/
    public ActionResult Login(string returnUrl)
    {
        return View();
    }

    // POST: /User/Login/
   [HttpPost]
    public ActionResult Login(LoginModel user)
    {
        var obj = UserModels.GetUser(user.UserName, user.Password);
        return View();
    }
 }

我的 Global.asax.cs

    public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();


    }

    protected void Application_BeginRequest()
    {
        const string culture = "id";
        CultureInfo ci = CultureInfo.GetCultureInfo(culture);

        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }
}

【问题讨论】:

    标签: forms jquery-mobile razor asp.net-mvc-4 submit


    【解决方案1】:

    你有嵌套的表单标签:

    @using (Html.BeginForm("Login", "User", FormMethod.Post, new Dictionary<string,Object> { {"enctype","multipart/form-data"}, {"data-ajax","false"}}))
    

    <form action="/User/Login" method="post" data-ajax="false">
    

    这两行代码都会生成一个标签。嵌套标签在 HTML 4+ 中是非法的。请删除其中一个表单标签,这应该可以解决问题。

    【讨论】:

    • 嗨 onemancat,我的错误,我忘了排除测试代码。我已经尝试过使用 HTML 帮助程序和普通
      ,但没有一个对我有用,我在 ActionResult Login(LoginModel 用户) 处添加了一个断点,我的代码在我点击提交后无法到达按钮。
    • 您能否更新您的代码以准确显示您现在拥有的内容?我将在示例应用程序中运行它来查看。您还可以包括您的路由配置吗?
    • 当我问的时候,你有任何全局操作过滤器吗?也很高兴看到这些......
    • 我已将 global.asax.cs 添加到我的帖子中。此外,我还使用codeproject.com/Articles/207602/… 提供多语言支持。
    【解决方案2】:

    发现我这几天痛苦的愚蠢错误。

    删除了 my _Layout 上的标签,它起作用了。

    感谢@onemancat 的回复,它提示我看看其他领域。

    【讨论】:

    • 太好了,很高兴你把它修好了
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多