#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
orViewBag
5. Спасибо, Рахул, за ваш ответ