Asp.net mvc MVC中的重载
我读到,由于路由混乱,我不能在MVC中重载操作 我试图在HomeController中重载Index(),但正如文章所说,我遇到了异常,但我注意到了这一点 microsoft已重载AccountController中的操作Asp.net mvc MVC中的重载,asp.net-mvc,overloading,Asp.net Mvc,Overloading,我读到,由于路由混乱,我不能在MVC中重载操作 我试图在HomeController中重载Index(),但正如文章所说,我遇到了异常,但我注意到了这一点 microsoft已重载AccountController中的操作 public ActionResult Login(string returnUrl){} public ActionResult Login(LoginModel model, string returnUrl){} 请澄清,谢谢微软通过设置HttpGet和HttpPos
public ActionResult Login(string returnUrl){}
public ActionResult Login(LoginModel model, string returnUrl){}
请澄清,谢谢微软通过设置
HttpGet
和HttpPost
使其过载。一个用于GET请求,另一个用于POST请求。你的代码呢
[HttpGet]
public ActionResult Login(string returnUrl){}
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl){}
在AccountController中,第一个方法与GET方法一起使用,第二个方法与POST方法一起使用。它是通过属性
[HttpGet]
和[HttpPost]
实现的
阅读有关get和post的更多信息。直到今天,您都无法用相同的名称但不同的参数来重载控制器的操作方法 唯一的可能性是有两个重载,为此需要将方法的属性设置为
HttpGet
和HttpPost
。比如说
[HttpGet]
public ActionResult foo(string myString)
{
return View();
}
[HttpPost]
public ActionResult foo(MyViewModelClass object)
{
return View();
}
关于你的困惑
根据一般惯例,第一个方法的类型应该是Get
,当有人发送访问该页面的请求时会调用该方法
第二种方法在用户提交带有登录详细信息的表单时调用。除了上面的答案之外,我们还可以添加名称属性以及HTTPGET和HTTPPOST as
[HttpPost]
[ActionName("Edit")]
public ActionResult Edit_Post(some parameters)
{
//code over here
}
After this we can call it as :- /MVC/EmployeeController/Edit/1
首先是一些定义:
重载
是多态性的一种形式,特别是接口,从类的公共可见部分的意义上讲,是相关的重写李>
动作是URL的一段
回到你的问题…
负责查找操作映射到的方法的是ControllerActionInvoker
。给定GET和POST,我们可以看到类中的多态方法映射到同一个操作,但服务于不同的HTTP方法(任何操作,即URL段多态性?!)。同样是的,我们可以使用ActionNameAttribute
(MVC v5)将一个动作映射到一个类方法,但同样,这与任何类型的多态性无关。简单地说,所有发生的事情都发生在ControllerActionInvoker
中,与重载
或重写
无关,最后与任何类型的多态性无关——它只是映射
结论。
出现了一个简单的问题:
字符串(URL的一段,3.)中的什么内容与上面的任何一个OOP定义(1.和2.)相关?或者,换言之,上面的任何OOP概念都可以转换为字符串的一部分吗?
URL段(碰巧被称为“action”)与类方法之间的转换存在于并不意味着我们所知道的关于第一个的一切都可以机械地应用于第二个和第二个。这个问题具有误导性,其主要目的是迷惑某人,而不是测试他/她的知识(我怀疑这是一个人工面试问题,不是真实的问题) 检查有关重载的链接。