Извините, если это глупый вопрос, но мне просто интересно, как лучше перенаправить на страницу с ошибкой , когда в модели возникла ошибка в asp.net mvc3 ,Перенаправление из модели в ASP.NET mvc3
Короче говоря, у меня есть приложение Controller, которое наследует все контроллеры, которое в функции «OnActionExecuting» проверяет, использует ли пользователь Internet Explorer.
Если это так, я вызываю функцию в моей модели ошибок (которая у меня есть, потому что я хочу зарегистрировать ошибку в базе данных), которая затем должна перенаправить пользователя на страницу с ошибкой, сообщающую загружать хром.
ApplicationController
public class ApplicationController : Controller
{
public string BASE_URL { get; set; }
public ApplicationController() {}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
BASE_URL = Url.Content("~/");
ErrorModel err = new ErrorModel();
String userAgent;
userAgent = Request.UserAgent;
if (userAgent.IndexOf("MSIE") > -1) {
err.cause("browser", "redirect", "some other info");
}
}
}
ErrorModel
public void cause(string _errCode, string strAction, string _otherInfo = "") {
this.error_code = _errCode;
this.error_otherInfo = _otherInfo;
try {
this.error_message = dctErrors[_errCode.ToLower()];
} catch (KeyNotFoundException) {
this.error_message = "Message not found.";
}
StackTrace sT = new StackTrace(true);
String[] filePathParts = sT.GetFrame(1).GetFileName().Split('\\');
this.error_filename = filePathParts.Last();
this.error_lineNo = sT.GetFrame(1).GetFileLineNumber();
this.error_function = sT.GetFrame(1).GetMethod().ReflectedType.FullName;
this.error_date = DateTime.Now;
this.error_uid = 0; //temporary
if (strAction == "redirect") {
//this is what I would like to do - but the "response" object does not
//exist in the context of the model
Response.Redirect("Error/" + _errCode);
} else if (strAction == "inpage") {
} else {
//do nothing
}
}
Я знаю, что в этом конкретном примере, ошибка не на самом деле происходит в модели, так что я мог бы просто перенаправить от контроллера. Но я хотел бы иметь возможность вызывать одну функцию, которая будет регистрироваться, а затем перенаправлять, если это возможно, поскольку это будет необходимо для многих других ошибок, которые, вероятно, будут иметь место.
Возможно, я ошибаюсь, и в этом случае я, конечно, открыт для изменения. Спасибо за помощь!
Бизнес-логика не должна быть в вашей модели. Переместите его на контроллер. – Jesse
Бизнес-логика тоже не должна быть в контроллере! – c0deNinja