Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC HttpGet属性_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc MVC HttpGet属性

Asp.net mvc MVC HttpGet属性,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,MVC的noob在这里,无法从中找到足够简单的解释 我刚开始开发一个用MVC构建的相当大的应用程序 在我使用的控制器中,大多数ActionResults都附加了[HttpGet]属性。所以我在构建代码,我自己构建了两个ActionResults,但是没有设置[HttpGet]属性 这些函数调用数据库层,然后将结果返回到视图。他们工作得很好。当我注意到他们身上没有[HttpGet]时,我添加了它们,然后这些调用就停止了。我不知道为什么,也不知道他们为什么要在那里 这是我在视图中打的电话: func

MVC的noob在这里,无法从中找到足够简单的解释

我刚开始开发一个用MVC构建的相当大的应用程序

在我使用的控制器中,大多数
ActionResults
都附加了
[HttpGet]
属性。所以我在构建代码,我自己构建了两个
ActionResults
,但是没有设置
[HttpGet]
属性

这些函数调用数据库层,然后将结果返回到视图。他们工作得很好。当我注意到他们身上没有
[HttpGet]
时,我添加了它们,然后这些调用就停止了。我不知道为什么,也不知道他们为什么要在那里

这是我在视图中打的电话:

function getExcelExport() {
var activePane = $('div.tab-pane.active');

var agencyCompany = $(activePane).find('#Agency_AgencyId').val();
if (!$(activePane).find('#form0').valid()) { return false; }
var month = $(activePane).find('#CommissionMonth').val();
var year = $(activePane).find('#CommissionYear').val();

window.location = 'AgencyManagement/GetCommissionsExcel?agencyID=' + agencyCompany + '&month=' + month + '&year=' + year;
};
以下是控制器中的操作:

        public ActionResult GetCommissionsExcel(string agencyid, string month, string year)
    {
        try
        {
            var as400rep = new iSeriesRepository(new iSeriesContext());
            var results = as400rep.GetCommissionExcel(agencyid, month, year);

            string xml = String.Empty;
            XmlDocument xmlDoc = new XmlDocument();

            XmlSerializer xmlSerializer = new XmlSerializer(results.GetType());

            using (System.IO.MemoryStream xmlStream = new System.IO.MemoryStream())
            {
                xmlSerializer.Serialize(xmlStream, results);
                xmlStream.Position = 0;
                xmlDoc.Load(xmlStream);
                xml = xmlDoc.InnerXml;
            }

            var fName = string.Format("CommissionsExcelExport-{0}", DateTime.Now.ToString("s"));
            fName = fName + ".xls";

            byte[] fileContents = System.Text.Encoding.UTF8.GetBytes(xml);

            return File(fileContents, "application/vnd.ms-excel", fName);
            }
        catch (Exception ex)
        {
            Log.Error(ex.Message, ex.InnerException);
            throw;
        }
    }

对此有简单的解释吗?

[HttpGet]
将该操作标记为仅用于GET请求的应用程序-

考虑以下几点:

public ActionResult DoSomething() { }
如果要访问/DoSomething或POST/DoSomething,则会调用该操作

具体说明:

[HttpGet]
public ActionResult DoSomething() { }

确保仅当请求是GET时才会调用此函数。添加
[HttpGet]
和调用“停止”时,原因是您将使用不同的HTTP谓词调用该方法,例如
POST

在方法上应用Http谓词属性意味着

当您没有使用http谓词属性时,所有操作都可以工作的原因是,该操作方法可以通过所有http谓词使用

[HttpPost]
标记该操作方法,它就会工作

[HttpPost]
public ActionResult Action(int id)
{
}
您可以为
GET
POST
使用相同的方法名,但该方法需要不同的签名(重载)


这通常用于PRG模式(POST、重定向、GET)。您可以进一步了解这一点

您是如何呼吁采取行动的?如果是Ajax,您是否将类型指定为GET或postook,因此在一个例子中,我得到了一个月的列表。调用来自如下视图:window.location='Agency/GetCommissions?agencyID='+agencyCompany+'&month='+month+'&year='+year;该调用转到数据层,数据层调用数据库,返回列表,并填充视图。所以这是一个正确的答案?如果我将[HttpGet]属性放在操作上,它将不会显示。你能解释一下原因吗?谢谢你的回答。你能编辑你的问题并显示更多的代码吗?特别是js呼叫你的mvc控制器好的,试过了,成功了。因此,它在没有属性的情况下工作的原因是因为只有一个操作具有该名称,对吗?如果有两个,一个GET操作和一个POST操作,我必须指定,这是有意义的。我将添加一个带有GET和POST的示例,如果您不放置http动词属性,那么该方法可以通过所有动词POST、GET、put等访问。非常好的解释Jamie,很抱歉它必须达到ELI5级别:),谢谢@崔佛古德柴尔德,很好!每个人都必须从某个地方开始。
[HttpGet]
public ActionResult Action() { }

[HttpPost]
public ActionResult Action(int id) { }