Member 13644870 Ответов: 1

Кнопка Submit не вызывает метод в MVC 5


Привет, я создаю простую страницу регистрации входа для клиентов. Поскольку я новичок в MVC5, я последовал некоторому учебнику и создал страницу входа в систему. Он работал нормально, но после создания регистрационной формы и внесения некоторых изменений внезапно он просто обновляет страницу. Я отменяю все изменения, но результат тот же.
Вот код для контроллера:
using MyWaayEcommerce.Models;
using MyWaayEcommerce.Models.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.UI.WebControls;

namespace MyWaayEcommerce.Controllers
{
    public class AuthController : Controller
    {
        // GET: Auth
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(UserLoginVM lv)
        {
            if (ModelState.IsValid)
            {
                UserManager um = new UserManager();
                if (um.IsEmailExist(lv.UserName))
                {
                    FormsAuthentication.SetAuthCookie(lv.UserName, false);
                    return RedirectToAction("Index", "Customers");
                }
                else
                {
                    return RedirectToAction("Index", "Customers");
                    //ModelState.AddModelError("", "Email or Password does not match");

                }

            }
            return View();
        }
    }
}

Код UserManagerModel:
using MyWaayEcommerce.Models;
using MyWaayEcommerce.Models.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.UI.WebControls;

namespace MyWaayEcommerce.Controllers
{
    public class AuthController : Controller
    {
        // GET: Auth
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(UserLoginVM lv)
        {
            if (ModelState.IsValid)
            {
                UserManager um = new UserManager();
                if (um.IsEmailExist(lv.UserName))
                {
                    FormsAuthentication.SetAuthCookie(lv.UserName, false);
                    return RedirectToAction("Index", "Customers");
                }
                else
                {
                    return RedirectToAction("Index", "Customers");
                    //ModelState.AddModelError("", "Email or Password does not match");

                }

            }
            return View();
        }
    }
}

Модель LoginView Пользователя:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MyWaayEcommerce.Models.ViewModels
{
    public class UserLoginVM
    {
        [Required(ErrorMessage = "Email is required")]
        [Display(Name ="Email")]
        public string UserName { get; set; }
        [Required(ErrorMessage = "Password is required")]
        [Display(Name = "Password")]
        public string Password { get; set; }
        [Required(ErrorMessage = "First Name is required")]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }
        [Required(ErrorMessage = "Last Name is required")]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        [Required(ErrorMessage = "Street Address is Required")]
        [Display(Name = "Street Address 1")]
        public string Street1 { get; set; }
        [Display(Name = "Street Address 1")]
        public string Street2 { get; set; }
        [Required(ErrorMessage = "City Name is Required")]
        [Display(Name = "City")]
        public string City { get; set; }
        [Required(ErrorMessage = "Province Name is Required")]
        [Display(Name = "Province")]
        public string Province { get; set; }
        [Required(ErrorMessage = "Country Name is Required")]
        [Display(Name = "Country")]
        public string Country { get; set; }
        [Required(ErrorMessage = "Postal Code is Required")]
        [Display(Name = "Postal Code")]
        public string Postal { get; set; }
        [Required(ErrorMessage = "Phone Number is Required")]
        [Display(Name = "Contact Number")]
        public string ContactNumber { get; set; }
    }
}

Представление входа в систему с именем Index.cshtml
@model MyWaayEcommerce.Models.ViewModels.UserLoginVM

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

<h2>Login</h2>
@using (Html.BeginForm("Login", "Auth", FormMethod.Post, new { id = "submitForm" }))
{
    @Html.AntiForgeryToken()
    <div class="form-group">
        @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
        <br />
        @Html.PasswordFor(model => model.Password, new  { @class = "form-control" } )
        <br />
    </div>
<input type="submit" value="Login" class="btn btn-default" />
}


Что я уже пробовал:

Я попытался исправить это, поискав кнопку отправки, не вызывая метод, и придумал параметры тега формы, но результаты все те же

1 Ответов

Рейтинг:
0

David_Wimbley

Я думаю, что понимаю вашу проблему.

В своей форме Html.Begin вы указываете, что ориентируетесь на вход в действие в controller Auth.

@using (Html.BeginForm("Login", "Auth", FormMethod.Post, new { id = "submitForm" }))<


В приведенном выше примере Login-это ваше действие, а Auth-ваш контроллер. Действие означает, что это метод контролера.

Таким образом, в вашем AuthController у вас есть действие индекса, но нет действия входа в систему

public class AuthController : Controller
    {
        [HttpPost]
        public ActionResult Index(UserLoginVM lv)
        {
            if (ModelState.IsValid)
            {
                UserManager um = new UserManager();
                if (um.IsEmailExist(lv.UserName))
                {
                    FormsAuthentication.SetAuthCookie(lv.UserName, false);
                    return RedirectToAction("Index", "Customers");
                }
                else
                {
                    return RedirectToAction("Index", "Customers");
                    //ModelState.AddModelError("", "Email or Password does not match");

                }

            }
            return View();
        }
    }


Вам нужно изменить вышеуказанное действие с Index к Login и тогда ваш код должен работать (я его не запускал).