我有一个名为AuthoriseAttribute的自定义属性,其构造函数如下所示:
public AuthoriseAttribute(int userId)
{
.. blah
}
Run Code Online (Sandbox Code Playgroud)
这与一个这样的方法一起使用GetUserDetails():
[Authorise(????????)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
Run Code Online (Sandbox Code Playgroud)
在运行时,Authorize属性的存在会导致执行某些授权代码,这需要用户的ID.显然,这可以从GetUserDetails()方法的参数中提取,但这意味着授权代码取决于方法的参数被赋予特定名称.
我希望能够将userId参数的实际值传递给属性,以便授权代码使用传递给属性的值(即不是方法参数),其名称已知.
像这样的东西(不起作用):
[Authorise(userId)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
如何在程序集中的任何位置设置属性,然后在整个程序集中反映这些字段属性并获取/设置属性附加的字段值?
如何在HtmlPurifier中允许自定义(html5 data-*)属性?
输入:
<img src="/my.jpg" data-type="5" alt="" />
Run Code Online (Sandbox Code Playgroud)
导致错误:
Attribute 'data-type' in element 'img' not supported
(for information on implementing this, see the support forums)
Run Code Online (Sandbox Code Playgroud)
HtmlPurifier选项设置为:
'HTML.AllowedAttributes' => array('img.src', 'a.href', 'img.data-type')
Run Code Online (Sandbox Code Playgroud) 主要的现代浏览器支持动态设置/检索自定义属性,IE-family除外.如何在所有浏览器中设置/获取自定义属性?
这是我到目前为止所尝试的:
HTML:
<input id="myInput" type="text" />
Run Code Online (Sandbox Code Playgroud)
JS:
var myInput = document.getElementById('myInput');
myInput.setAttribute('custom-attr', 'custom-value');
alert(myInput.getAttribute('custom-attr'));
Run Code Online (Sandbox Code Playgroud)
要么
var myInput = document.getElementById('myInput');
var customAttr = document.createAttribute('custom-attr');
customAttr.value = 'custom-value';
myInput.setAttributeNode(customAttr);
alert(myInput.getAttribute('custom-attr'));
Run Code Online (Sandbox Code Playgroud)
在这两种情况下IE alert()返回null.
我正在尝试将自定义数据所需的属性添加到asp Checkbox控件,它适用于我使用过的所有其他控件,但是在复选框上,它会在具有自定义属性的span中呈现复选框.我已经尝试在标记中添加属性,并尝试将其添加到后面的代码中的控件.有任何想法吗?
我需要在运行时更改属性的参数.我将我的问题简化为简单的例子.
属性类:
[AttributeUsage(AttributeTargets.Property)]
public class MyAttribute : Attribute
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
简单实体,它使用属性修饰属性:
public class MyEntity
{
[MyAttribute(Name="OldValue1")]
public string Data1{ get; set; }
[MyAttribute(Name = "OldValue2")]
public string Data2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我创建了MyEntity类的实例.我可以更改对象属性的值,但是我不能在对象实体上更改属性的属性Name的值.可能吗?
对象实体的属性值我可以用这部分代码改变:
entityProp.SetValue(entity,"NewData",null);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何更改对象实体上属性Name的值
这不起作用:
Run Code Online (Sandbox Code Playgroud)attProp.SetValue(attribute,"NewData",null);
属性的价值名称仍然是原创的.
这是所有测试代码.谢谢你的帮助.
[TestMethod]
public void Test()
{
var entity = new MyEntity
{
Data1 = "OldData",
Data2 = "OldData"
};
PropertyInfo[] entityProps = entity.GetType().GetProperties();
foreach (var entityProp in entityProps)
{
var attribute = Attribute.GetCustomAttribute(entityProp, …Run Code Online (Sandbox Code Playgroud) 背景:在属性规范中,有时存在两种写入应用属性的有效方法。例如,如果属性类具有名称HorseAttribute,则可以将属性应用为[HorseAttribute]或[Horse]。歧义可以用@例如来解决[@Horse]。
以下是有效的程序:
using System;
using Alpha;
using Beta;
namespace N
{
[Horse]
class C
{
}
}
namespace Alpha
{
// valid non-abstract attribute type with accessible constructor
class HorseAttribute : Attribute
{
}
}
namespace Beta
{
// any non-attribute type with that name
enum Horse
{
}
}
Run Code Online (Sandbox Code Playgroud)
Alpha.HorseAttribute我编写just时,C#编译器可以选择[Horse]。毕竟,类型Beta.Horse完全不适合在属性规范中使用。
即使交换名称,C#编译器也会知道该怎么做:
using System;
using Alpha;
using Beta;
namespace N
{
[Horse] …Run Code Online (Sandbox Code Playgroud) 我一直在添加我使用JQuery引用的自定义属性,这非常有用.但这是好的做法吗?
例:
<div class="monkeys" customattr="big Monkey"> </div>
Run Code Online (Sandbox Code Playgroud)
谢谢大家
我想将[FirstTime]属性放在控制器函数之上,然后创建一个FirstTimeAttribute具有一些逻辑来检查用户是否输入了他的名字,并将其重定向到/Home/FirstTime他是否已经输入.
所以不要做:
public ActionResult Index()
{
// Some major logic here
if (...)
return RedirectToAction("FirstTime", "Home");
return View();
}
Run Code Online (Sandbox Code Playgroud)
我会这样做:
[FirstTime]
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我的web api中有一个控制器.我们称之为TimeController.
我有GET行动和PUT行动.它们看起来像这样:
public class TimeController : ApiController
{
[HttpGet]
public HttpResponseMessage Get()
{
return Request.CreateResponse(HttpStatusCode.OK, DateTime.UtcNow);
}
[HttpPut]
public HttpResponseMessage Put(int id)
{
_service.Update(id);
return Request.CreateResponse(HttpStatusCode.OK);
}
}
Run Code Online (Sandbox Code Playgroud)
我也有一个路由配置如下:
routes.MapHttpRoute("DefaultApi", "{controller}/{id}", new { id = RouteParameter.Optional });
所以我可以以一种宁静的方式访问它.
现在,我还想GET使用自定义Route属性对操作进行版本控制.我使用的代码与Richard Tasker在这篇博客文章中谈到的代码非常相似.
(不同之处在于我使用正则表达式从accept头获取版本.其他所有内容都非常相似)
所以我的控制器现在看起来像这样:
public class TimeController : ApiController
{
private IService _service;
public TimeController(IService service)
{
_service = service;
}
[HttpGet, RouteVersion("Time", 1)]
public HttpResponseMessage Get()
{
return Request.CreateResponse(HttpStatusCode.Ok, DateTime.UtcNow); …Run Code Online (Sandbox Code Playgroud) c# ×5
asp.net ×2
html ×2
.net ×1
asp.net-mvc ×1
dynamic ×1
html5 ×1
htmlpurifier ×1
javascript ×1
jquery ×1
reflection ×1
runtime ×1