#c# #asp.net-mvc-4
#c# #asp.net-mvc-4
Вопрос:
У меня есть 5 разных контроллеров / моделей / представлений. У меня есть кнопка в каждом из этих представлений, которая вызовет хранимую процедуру. В зависимости от контроллера хранимой процедуре передается другой параметр.
Я знаю, как вызвать эту хранимую процедуру из каждого класса модели, а затем использовать ее в представлении и контроллере. Я не знаю, как создать и использовать эту хранимую процедуру в качестве общей функциональности.
Вот фрагмент того, что я сделал — в каждом классе модели я использовал ADO.NET Модель данных объекта, чтобы получить хранимую процедуру в модели.
В каждом представлении у меня есть:
<p style="margin-left: 2.5em">
<br />
<input type="button" style="height:40px; width: 160px;font-weight: bold;background-color:#00ffff; " value='@("Push to use stored procedure" )' onclick=" if (confirm ('Are you sure you want to do this?')){ window.location.href='@Url.Action("SPROCButton", "Controller1")' ;} " />
</p>
В контроллере1:
public ActionResult SPROCButton()
{
try
{
db.uspCallTables("MyDB.temp.Table1");
return RedirectToAction("Index");
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
В других контроллерах единственная строка, которая изменяется, — это параметр. Необходимо ли иметь эту хранимую процедуру в каждой модели, а затем вызывать ее?
Спасибо вам, мистер
Ответ №1:
Есть несколько способов решить эту проблему. Я предлагаю создать базовый контроллер и добавить весь общий код.
Сила наследования не будет видна во всем своем великолепии в этом примере, но я думаю, что это очень поможет вам при написании общего кода.
public class BaseController : Controller
{
public void callSP(string theParameter){
db.uspCallTables(theParameter);
}
}
затем ваш Controller1 следующим образом:
public class Controller1 : BaseController
{
public ActionResult SPROCButton()
{
try
{
callSP("MyDB.temp.Table1");
return RedirectToAction("Index");
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
Таким образом, вы сможете добавить весь общий код в родительский класс (BaseController.cs).
Я хочу уточнить, что я предполагаю, что «db» содержит контекст базы данных. Чтобы это сработало для вас, вы должны загрузить объект «db» нового класса BaseController таким же образом, как вы это делали в вашем Controller1. Я надеюсь, что это поможет вам. Дайте мне знать об этом! С уважением.