Answers:
如果您尝试扩展此方法:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues);
尽管我确定Khaja的Object扩展会起作用,但是您可以通过创建RouteValueDictionary并传入routeValues对象,从Context中添加其他参数,然后使用ActionLink重载(使用RouteValueDictionary而不是对象)来返回来获得更好的性能:
这应该可以解决问题:
public static MvcHtmlString MyLink(this HtmlHelper helper, string linkText, string actionName, object routeValues)
{
RouteValueDictionary routeValueDictionary = new RouteValueDictionary(routeValues);
// Add more parameters
foreach (string parameter in helper.ViewContext.RequestContext.HttpContext.Request.QueryString.AllKeys)
{
routeValueDictionary.Add(parameter, helper.ViewContext.RequestContext.HttpContext.Request.QueryString[parameter]);
}
return helper.ActionLink(linkText, actionName, routeValueDictionary);
}
以下扩展类将为您提供所需的内容。
public static class ObjectExtensions
{
public static IDictionary<string, object> AddProperty(this object obj, string name, object value)
{
var dictionary = obj.ToDictionary();
dictionary.Add(name, value);
return dictionary;
}
// helper
public static IDictionary<string, object> ToDictionary(this object obj)
{
IDictionary<string, object> result = new Dictionary<string, object>();
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
foreach (PropertyDescriptor property in properties){
result.Add(property.Name, property.GetValue(obj));
}
return result;
}
}
public static string TextBox(this HtmlHelper html, string value, string labelText, string textBoxId, object textBoxHtmlAttributes, object labelHtmlAttributes){}
这将接受文本框应具有的id值,并且标签应引用该ID值。如果使用者现在在textBoxHtmlAttributes中不包含“ id”属性,则该方法将创建错误的标签。
我可以通过反射检查是否将此属性添加到labelHtmlAttributes对象中。如果是这样,我想添加它或创建一个添加了它的新匿名对象。但是因为无法通过遍历旧属性并添加自己的“ id”属性来创建新的匿名类型,所以我有些困惑。
具有强类型ID属性,然后具有匿名类型“属性”属性的容器将要求代码重写不符合“添加ID字段”的要求。
希望这种反应是可以理解的。今天到头了,我的脑子再也无法排成一列。