我只是ASP.NET MVC的新手,我不确定如何以"正确的方式"完成某项任务.
本质上,我将登录的userId存储在HttpContext.User.Identity中,并编写了一个EnhancedAuthorizeAttribute来执行一些自定义授权.
在overriden OnAuthorization方法中,我的域模型命中数据库以确保当前用户id可以访问传入的routeValue"BatchCode".原型是:
ReviewGroup GetReviewGroupFromBatchCode(string batchCode);
Run Code Online (Sandbox Code Playgroud)
如果用户无法访问ReviewGroup,则它将返回null,然后OnAuthorization拒绝访问.
现在,我知道装饰动作方法只有在OnAuthorization通过时才会执行,但我不想再次访问数据库以再次获取ReviewGroup.
我正在考虑将ReviewGroup存储在控制器中HttpContext.Items["reviewGroup"]并从控制器访问它.
这是一个可行的解决方案,还是我走错了路?
谢谢!
当我尝试Html.Action在ASP.NET MVC 3中使用与当前控制器不同的命名空间中的控制器时,我收到一个错误:
码:
@Html.Action("Foo", "Application", new { id = "FG2" })
Run Code Online (Sandbox Code Playgroud)
错误:
未找到路径'/ rrmvc/store/checkout'的控制器或未实现IController.
仅当控制器ApplicationController与当前控制器位于不同的NAMESPACE中时才会出现此错误StoreControllers.CheckoutController(实际上它们也处于完全不同的区域).
调用时是否无法指定命名空间Html.Action(完全限定命名空间的明显方法似乎没有用)?
没有lambda方法可以使用,我在MVC3 RTM中没有运气Html.RenderAction.
编辑:我认为它可能与该地区有关 - 或者也许这可能是一个完整的红鲱鱼.我在另一个名称空间中有另一个控制器可以正常工作 - 所以我认为问题更复杂.如果我弄清楚的话,我会回复一个答案 - 或者只是删除这个问题,如果不是为了避免混淆!
有没有办法通过使用 params 关键字将多个参数传递给带有 GET 的操作方法,如下所示?
http://.../Method/param1/param2/param3/..../paramN
Run Code Online (Sandbox Code Playgroud)
动作方法应如下:
public ActionResult Method(params string[] parameters)
{
//Do what ever.
}
Run Code Online (Sandbox Code Playgroud) 我看到以下代码应用于 .net core 操作方法:
[HttpPost("MyAction", Name = "MyAction")]
public IActionResult MyAction()
{
// some code here
}
Run Code Online (Sandbox Code Playgroud)
HttpPost 属性中“Name”参数的用途是什么?
我正在构建如下图像byte[].
public FileContentResult GetEmployeeImage(int empId)
{
MemoryStream ms = new MemoryStream(byteArray);
Image returnImage = Image.FromStream(ms);
return returnImage;//How should i return this image to be consumed by javascript.
}
Run Code Online (Sandbox Code Playgroud)
我想通过控制器操作方法将此图像返回到浏览器,因此它可以被我的javascript代码使用并显示在浏览器中.我该怎么做?
我正在尝试实现一个用户名列表,可以通过单击UP或DOWN链接重新排列.
<ul>
<ui:repeat var="user" value="#{cc.attrs.value}">
<li>
#{user.name}
<h:link outcome = "user" value = "left" onclick="#{accountController.moveDown}">
<f:param name="id" value = "${user.id}" />
</h:link>
</li>
</ui:repeat>
</ul>
Run Code Online (Sandbox Code Playgroud)
这里的问题是我似乎没有正确使用onclick属性.这样做的正确方法是什么?
编辑:根据您的建议,我将所有链接放在一个表单中:
<h:form>
<ui:repeat value="#{cc.attrs.value}" var = "user">
<div class = "user">
<h:commandLink id = "Link1" value = "Up" binding = "#{accountController.ommandLink}" action = "#{accountController.moveUserUp}">
<f:attribute name = "userId" value = "#{user.id}" />
</h:commandLink>
<h:commandLink id = "Link2" value = "Down" binding = "#{accountController.commandLink}" action = "#{accountController.moveUserDown}">
<f:attribute name = …Run Code Online (Sandbox Code Playgroud) 可能重复:
Mvc Html.ActionButton
随着ASP.NET MVC 3我知道如何创建一个链接到一个操作方法很容易,但我想知道的是你如何让一个按钮是什么(点击时)调用特定的操作方法?
我刚刚在我的MVC 3站点中发现了一个通过简单点击链接调用的动作方法.由于某种原因,这个动作方法被多次调用.不仅如此,后续调用在之前的调用完成之前调用.我的意思是,假设我的动作方法中有10行代码,编号为1,2 ...... 10.方法的第一次调用将执行第1,2和3行.第二次调用执行第1,2行,在图3和4中,第三次调用执行第1,2,3和4行,然后第一次从第4行继续,依此类推.好像多个线程正在调用此操作方法,但据我所知,没有任何类型的事情发生,因为我所做的就是点击一个链接.这有什么理由会发生吗?
UPDATE
实际上,在完成分析后,我可以看到正在进行2次调用.
我有一个关于 ASP.Net Core 中控制器方法的新手问题。我有下面两种不同的实现,一种是同步的,另一种是异步的。
问题 - 我认为,我理解同步和异步之间的区别,但是当涉及到进入控制器方法时,如果另一个用户在其中并且仍在执行过程中,ASP.Net 是否会阻止所有用户进入同步方法跑过它吗?
如果是这样,如果我预计有数千个并发用户,那么这种同步方法会大大减慢我的应用程序的速度,对吧?
那么我应该在几乎所有地方都使用异步控制器调用吗?除非我特别想将另一个用户锁定在外面!
这里是异步的
[HttpPost]
public async Task<IActionResult> PostRecordAsync([FromBody] Record record)
{
record = await RecordsContext.PostRecordAsync(_context, record);
return Ok(record);
}
public static async Task<Record> PostRecordAsync(MpidDbContext context, Record record)
{
context.Records.Add(record);
await context.SaveChangesAsync();
return record;
}
Run Code Online (Sandbox Code Playgroud)
和非异步
[HttpPost]
public ActionResult PostRecord([FromBody] Record record)
{
record = RecordsContext.PostRecord(_context, record);
return Ok(record);
}
public static Record PostRecord(MpidDbContext context, Record record)
{
context.Records.Add(record);
context.SaveChanges();
return record;
}
Run Code Online (Sandbox Code Playgroud) 我有一个View,用户可以在其中将文件上传到服务器.
在这个视图中我还有2个按钮:一个用于上传文件,另一个用于下载导入的最后一个文件.
在我的控制器中,我创建了2个操作方法:导入和导出.
我怎么能设法将每个按钮单击重定向到我的控制器中的正确操作方法?
我试过Html.ActionLink:
<%= Html.ActionLink("Upload", "Import", "OracleFile")%>
<%= Html.ActionLink("Download", "Export", "OracleFile")%>
Run Code Online (Sandbox Code Playgroud)
Html.ActionLink没有做到这一点.动作链接带我到正确的Action方法,但他们正在生成GET请求.这样Request.Files.Count = 0.
我需要一个POST请求.
注意:最有趣的部分是上传工作,突然间它停止工作.我已经看到有些人在FileUpload任务中遇到同样的问题,其中Request.Files总是为空.我认为它是空的,因为你需要一个帖子到服务器.不是吗?
actionmethod ×10
c# ×5
asp.net-mvc ×4
asp.net-core ×2
asp.net ×1
async-await ×1
asynchronous ×1
button ×1
hyperlink ×1
image ×1
javascript ×1
jsf ×1
jsf-2 ×1
onclick ×1
parameters ×1
post ×1