Отображать сообщение о недопустимых данных для входа с использованием кода MVC

#c# #asp.net-mvc #model-view-controller

#c# #asp.net-mvc

Вопрос:

Что я хочу, так это то, что я написал функцию для проверки учетных данных пользователя для входа на стороне сервера. Итак, чего я не получаю, я хочу выдать сообщение, если пользователь ввел неверные учетные данные.

Ниже приведен код для проверки.

 public ActionResult ValidateUser()
    {
        string strUsername = Convert.ToString(Request.Form["txtUsername"]);
        string strPassword = Convert.ToString(Request.Form["txtPassword"]);
        //  return   RedirectToAction("Assign","App");
        string strReturn = "";
        string strDbError = string.Empty;
        strUsername = strUsername.Trim();
        strPassword = strPassword.Trim();
        string strUserName = "";
        string strCurrentGroupName = "";
        int intCurrentGroupID = 0;
        string controller = "";
        string action = "";

        UserProviderClient ObjUMS = new UserProviderClient();
        bool result = ObjUMS.AuthenticateUser(strUsername, strPassword, out strDbError);

        Session["isUserAuthenticated"] = resu<

        try
        {
            if (result == true)
            {
                Session["isUserOutsideINDomain"] = true;
                Session["OutsideINDomainUsername"] = strUsername;
                //redirect to respective controller

                UMS ObjUMSDATA = new UMS();
                //strUserName = System.Web.HttpContext.Current.User.Identity.Name.Split('\')[1];
                strUserName = strUsername;
                _UMSUserName = strUserName;

                if (!string.IsNullOrEmpty(strUserName))
                {
                    List<UMSGroupDetails> lstUMSGroupDetails = null;
                    List<UMSLocationDetails> lstUMSLocationDetails = null;

                    ObjUMSDATA.GetUMSGroups(strUserName, out strCurrentGroupName, out intCurrentGroupID, out lstUMSLocationDetails, out lstUMSGroupDetails);
                    if (strCurrentGroupName != "" amp;amp; intCurrentGroupID != 0)
                    {
                        ViewBag.LoginUserName = strUserName.ToUpper();
                        ViewBag.CurrentGroupName = strCurrentGroupName;
                        ViewBag.CurrentGroupID = intCurrentGroupID;
                        ViewBag.GroupDetails = lstUMSGroupDetails;
                        ViewBag.LocationDetails = lstUMSLocationDetails;
                        TempData["LoginUserName"] = strUserName.ToUpper();
                        Session["LoginUserName"] = strUsername.ToUpper();
                        TempData["Location"] = lstUMSLocationDetails;
                        Session["strCurrentGroupName"] = strCurrentGroupName;
                        TempData["strCurrentGroupName"] = strCurrentGroupName;
                        TempData.Keep();
                    }
                    else
                    {
                        return RedirectToAction("Error", "Shared");
                        //action = "ErrorPage"; controller = "UnAutherized";      
                        TempData["strLoginErrorInfo"] = "Invalid Username or Password";
                        TempData.Keep();
                    }
                }
            }

            if (strCurrentGroupName == "SAP Executive")
            {
                action = "Assign"; controller = "App";
            }
            else if (strCurrentGroupName == "Maintenance Lead")
            {
                //return RedirectToAction("App", "Certify");
                action = "Certify"; controller = "App";
            }
            else if (strCurrentGroupName == "NEIQC CMM")
            {
                //return RedirectToAction("App", "Approver");
                action = "Approver"; controller = "App";
            }

        }
        catch (Exception ex)
        {
            ApplicationLog.Error("Error", "ValidateUser", ex.Message);
        }
        return RedirectToActionPermanent(action, controller);
    }
  

Пожалуйста, подскажите, где я могу указать в моем приведенном выше коде.

Комментарии:

1. Что вы подразумеваете под запросом здесь? Если вы хотите отправить ответное приглашение, вы можете сделать что-то вроде return Json("Invalid Credentials", JsonRequestBehavior.AllowGet); , если вы используете AJAX для отправки в свою функцию. Если вы используете привязку к модели, вы можете использовать ModelState.AddModelError("Error", "Invalid Credentials"); return View(viewModel);

2. @RahulSharma: Спасибо за комментарий, можете опубликовать в разделе ответов. чтобы это могло быть видно должным образом

Ответ №1:

Существуют различные способы, с помощью которых вы можете отправлять приглашения к сообщению обратно в представление с вашего контроллера:

Если вы используете AJAX для отправки на свой контроллер, вы могли бы использовать ответ JSON. Примером этого может быть:

 $.ajax({
 //You AJAX code....
 //On success
 success: function (data){
   if (data == "Invalid") {
     alert("Invalid Credentials Supplied");
  }
 },
 //If there is any error
 error: function (data) {
 alert("Could not process your request.");
 },
});
  

И в вашем контроллере:

 public ActionResult ValidateUser()
{
//Your logic
return Json("Invalid", JsonRequestBehavior.AllowGet);
}
  

или

Вы также можете использовать ViewData or ViewBag для настройки сообщений с приглашениями. Примером может быть:

На вашем представлении:

 <script type="text/javascript">
    $(document).ready(function () {
        var yourPrompt= '@ViewBag.PromptMessage';
        alert(yourPrompt);
    });
</script>
  

В вашем контроллере вы можете настроить приглашение:

 ViewBag.PromptMessage= "Invalid Credentials Supplied";
  

Альтернативно использовать ViewData с условным выражением:

 <script type="text/javascript">
    $(document).ready(function () {

        var yourPrompt= '@ViewData["PromptMessage"]';
        if(yourPrompt=="Invalid"){
        alert("Invalid Credentials supplied");
       }        
    });
</script>
  

В вашем контроллере вы можете настроить приглашение:

 ViewData["PromptMessage"] = "Invalid";
  

или

Вы могли бы использовать ModelState для отображения ваших подсказок или ошибок в вашем представлении. Это используется, когда вы используете строго типизированную привязку Model-View в вашем контроллере. Пример:

На ваш взгляд, настройте свой ValidationSummary :

 @Html.ValidationSummary(false, "", new { @class = "text-danger" })
  

По умолчанию ValidationSummary отфильтровывает сообщения об ошибках на уровне полей. Следующие сообщения об ошибках будут отображаться в виде сводки вверху. Пожалуйста, убедитесь, что у вас нет метода ValidationMessageFor для каждого из полей в вашей модели. Это только для определенных полей.

Вы также можете отобразить пользовательское сообщение об ошибке с помощью ValidationSummary. Чтобы отобразить пользовательское сообщение об ошибке, прежде всего, вам нужно добавить пользовательские ошибки в ModelState в соответствующем методе действия.

В вашем контроллере:

 public ActionResult DoSomething()
{
  //Your condition where you want to show your message
  //Add to the model state, your custom error 
  ModelState.AddModelError(string.Empty, "Invalid Credentials Supplied")
  return View("Your View Name");
}
  

Добавление:

Если вы хотите настроить стиль вашего сообщения об ошибке в вашем представлении, добавьте класс в свой ValidationSummary, подобный этому @Html.ValidationSummary(false, "", new { @class = "text-danger" }) . Затем вы можете использовать этот класс в своем CSS следующим образом:

 .text-danger
{ 
/*Your style*/
}
  

Комментарии:

1. Я попробовал последний с моим текущим кодом выше, но он не выдавал сообщение, которое было отправлено. любая помощь

2. ModelState Тот? Вы пробовали ViewData метод?

3. Нет, я не пробовал viewdata. я добавил подобное else { ModelState.AddModelError(string.Empty, "Invalid Username and password supplied"); } , но без подсказки

4. Вы добавили ValidationSummary в свое представление? Последний метод предназначен для привязки строго типизированной модели к представлению. Я бы посоветовал вам использовать метод ViewData or ViewBag

5. Спасибо, Рахул, за ваш ответ