gcogco10 Ответов: 1

Как сделать ваш MVC интерактивным с помощью кнопки отправки?


Привет Команда

У меня есть проблема, моя кнопка Создать, кажется, не работает хорошо. Какова логика, просто когда кнопка нажата, чтобы зарегистрировать мой MVC. Это означает, что он должен попасть в контроллер, модель и представление. То, что он делает сейчас, это только проверка пользователя, и он наследует эту логику от методов входа в систему и нуждается в некоторой помощи.

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

<pre> Controller:
     [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public ActionResult Create(CreateModel objSubmit)
            {
                ViewBag.Msg = "Details submitted successfully";
    
                return View(objSubmit);
            }
    
    // This is for login, and its hits this method each time.
     [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public ActionResult Login(Login login)
            {
                if (ModelState.IsValid)
                {
                    bool success = WebSecurity.Login(login.username, login.password, false);
                    var UserID = GetUserID_By_UserName(login.username);
                    var LoginType = GetRoleBy_UserID(Convert.ToString(UserID));
    
                    if (success == true)
                    {
                        if (string.IsNullOrEmpty(Convert.ToString(LoginType)))
                        {
                            ModelState.AddModelError("Error", "Rights to User are not Provide Contact to Admin");
                            return View(login);
                        }
                        else
                        {
                            Session["Name"] = login.username;
                            Session["UserID"] = UserID;
                            Session["LoginType"] = LoginType;
    
                            if (Roles.IsUserInRole(login.username, "Admin"))
                            {
                                return RedirectToAction("AdminDashboard", "Dashboard");
                            }
                            else
                            {
                                return RedirectToAction("UserDashboard", "Dashboard");
                            }
    
                        }
    
                    }
                    else
                    {
                        ModelState.AddModelError("Error", "Please enter valid Username and Password");
                        return View(login);
                    }
    
    
    
                }
                else
                {
                    ModelState.AddModelError("Error", "Please enter Username and Password");
                    return View(login);
                }
    
            }
    
    Model:
    namespace eNtsaPortalWebsiteProject.Models
    {
        public class CreateModel
        {
            [Required]
            [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Password")]
            public string password { get; set; }
    
            [Required]
            public string username { get; set; }
        }
    }
    
    // View for login
    <div class="col-md-12 col-md-offset-10 col-xs-12">
                                <div class="loginPage panel-info">
                                    <span class="">class="glyphicon glyphicon-user">Username:</span>
                                    <div class="form-group text-center">
                                        @Html.TextBoxFor(model => model.username, new { @class = "form-control text-center", autocomplete = "off" })
                                        @Html.ValidationMessageFor(model => model.username)
                                    </div>
    
    
    
    
                                    <div class="form-group">
                                        <span class="">class="glyphicon glyphicon-user">Password:</span>
                                        @Html.PasswordFor(model => model.password, new { @class = "form-control text-center", autocomplete = "off" })
                                        @Html.ValidationMessageFor(model => model.password)
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <input id="BtnLogin" type="submit" class="btn btn-success btn-pressure" name="BtnLogin" value="Login" />
                                    <input id="BntCreate" type ="submit" class="btn btn-info btn-pressure" name="BtnCreate" value="Create" />
                                </div>
    
                            </div>
    View for creating user:
     <div class="col-md-12 col-md-offset-10 col-xs-12">
                            <div class="glyphicon-registration-mark">
                                <div class="">class="glyphicon glyphicon-user">Username:</div>
                                <div class="form-group text-center">
                                    @Html.TextBoxFor(model=>model.username, new  {@class ="form-control text-center", automplete="off" })
                                    @Html.ValidationMessageFor(model=>model.username)
                                </div>
    
    
                                <div class="form-group">
                                    <span class="">class="glyphicon glyphicon-user">Password:</span>
                                    @Html.PasswordFor(model=>model.password, new {@class = "form-control text-center", autocomplete="off" })
                                    @Html.ValidationMessageFor(model=>model.password)
                                </div>
                            </div>
                        </div>
    
                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <input id="BtnSubmit" type="submit" class="btn btn-success btn-pressure" name="BtnSubmit" value="Submit"/>
                            </div>
                        </div>
                    
    
                }
            </div>

F-ES Sitecore

Я не понимаю вопроса, но если проблема заключается в том, что вам нужны разные кнопки отправки, чтобы делать разные вещи, то убедитесь, что каждая отправка имеет уникальное "имя" и "значение", а имена являются частью привязки вашей модели (в модели или в качестве параметров к действию, в которое они отправлены), а имя, которое не является пустым, - это кнопка, которая была нажата.

Если вы погуглите "c# mvc multiple submit buttons", то найдете для этого несколько более умных решений, таких как пользовательские атрибуты и т. д.

gcogco10

Я создал уникальное имя и значение для этого обработчика, но все еще не получил его правильно. В чем может быть проблема? Я думаю, что мой контроллер работает не очень хорошо. Каждый раз нажмите кнопку Создать, проверку он получает от actionResult метод входа в систему.

1 Ответов

Рейтинг:
2

jimmson

Здесь нет <form> в вашем коде.
Заверните свою форму в <form></form> теги и установить action и method атрибуты.

Для получения дополнительной информации перейдите по этой ссылке: HTML-форма[^]


gcogco10

Никакого мата там нет, я проверил как createUser.cshtml, так и login.cshtml.

jimmson

Тогда вы не включили его в свой код, который вы послали.

gcogco10

@jimmson, я действительно вызвал его на своем контроллере=>model=>view [HttpPost]
[Атрибута allowanonymous]
public ActionResult Create(CreateModel submit)
{
ViewBag.Msg = "сведения успешно отправлены";

return View(отправить);
}

jimmson

Это не то, о чем я говорю. Покажите нам код, включая теги вашей формы. В коде нет никакой формы, и по типу вопросов, которые я обычно вижу от вас здесь, на CodeProject, я очень сомневаюсь, что у вас действительно есть какая-то форма. Я просто пытаюсь помочь..

gcogco10

&низкотемпературный;






@использование (в формате HTML.Бигинформ())
{
@HTML-код.AntiForgeryToken()


@HTML-код.ValidationSummary()




Имя пользователя:
@HTML-код.TextBoxFor(модель=&ГТ;модель.имя пользователя, новые {@класс ="форма контроля текст-центр", automplete="выкл" })
@HTML-код.Последняя(модель=&ГТ;модель.имя пользователя)




Пароль:
@HTML-код.Одноразовый пароль Для(модель=&ГТ;модель.пароль, новые {@класс = "форма контроля текст-центр", автозаполнение="выкл" })
@HTML-код.Последняя(модель=&ГТ;модель.пароль)











}

jimmson

Так-то лучше!
Итак, вы должны указать действие и метод в своем Html.BeginForm(), как я написал в своем ответе. Поймите эти вещи правильно, и у вас может быть ответ (однако я не говорю, что нет никакой другой ошибки).
Здесь вы найдете, как это сделать: https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.html.formextensions.beginform?view=aspnet-mvc-5.2