답변:
이 방법을 확장하려는 경우 :
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues);
Khaja의 Object 확장이 작동 할 것이라고 확신하지만 RouteValueDictionary를 만들고 routeValues 개체를 전달하고 Context에서 추가 매개 변수를 추가 한 다음 개체 대신 RouteValueDictionary를 사용하는 ActionLink 오버로드를 사용하여 반환하면 더 나은 성능을 얻을 수 있습니다.
이것은 트릭을 수행해야합니다.
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;
}
}
여기에서 익명 유형을 의미한다고 가정합니다 new { Name1=value1, Name2=value2}
. 그렇다면 운이 좋지 않습니다. 익명 유형은 고정되고 컴파일 된 코드라는 점에서 일반 유형입니다. 자동 생성됩니다.
당신이 할 수 있는 것은 글을 쓰는 new { old.Name1, old.Name2, ID=myId }
것이지만 그것이 정말로 당신이 원하는 것인지 모르겠습니다. 상황에 대한 자세한 내용 (코드 샘플 포함)이 이상적입니다.
또는 항상 ID가 있는 컨테이너 개체 와 나머지 속성이 포함 된 다른 개체를 만들 수 있습니다 .
public static string TextBox(this HtmlHelper html, string value, string labelText, string textBoxId, object textBoxHtmlAttributes, object labelHtmlAttributes){}
이것은 텍스트 상자에 있어야하고 레이블이 참조해야하는 id 값을 허용합니다. 소비자가 이제 textBoxHtmlAttributes에 "id"속성을 포함하지 않는 경우 메서드는 잘못된 레이블을 만듭니다.
이 특성이 labelHtmlAttributes 개체에 추가되었는지 리플렉션을 통해 확인할 수 있습니다. 그렇다면 추가하거나 추가 된 새 익명 개체를 만들고 싶습니다. 하지만 이전 속성을 살펴보고 내 자신의 "id"속성을 추가하여 새로운 익명 유형을 만들 수 없기 때문에 약간 갇혀 있습니다.
강력한 형식의 ID 속성과 익명 형식의 "attributes"속성이있는 컨테이너는 "add an id field"요구 사항에 맞지 않는 코드 재 작성이 필요합니다.
이 응답이 이해할 수 있기를 바랍니다. 하루가 끝났고 더 이상 내 머리를 줄 수 없습니다 ..