我将在我们的数据库中动态生成一些超链接。例如,我去获取有关项目的一些信息,然后基于该数据库表中的配置信息(其中包含要生成的HTML字段类型等信息)我将从我在MVC中创建的自定义控件动态创建Html控件
这让我想到了超链接。如果我必须在这里或那里为某些产品动态生成超链接,以便我们的View上的产品下面的表单现在只是一个动态生成的自定义控件。当你不打算使用Helper方法时,我如何在这些实例上指定一个控制器/动作?(因为你动态地在你的视图中创建这些字段)使用类似或不会看到类似Html的东西。 Actionlink因为字段是在运行时动态生成的吗?
答案 0 :(得分:0)
我使用的一个解决方案是创建一个包装类,其中包含所有这些信息,然后您可以将这些信息传递给辅助方法:
public class RouteWrapper
{
public string RouteName { get; set; }
public object RouteValues { get; set; }
public string LinkText { get; set; }
/* Other Properties pertaining to your data */
}
在包装器中,您将拥有定义RouteName和RouteValues属性的方法。或者,如果您只需要在控制器和操作之间进行更改,则可以按照这种方式进行设置。虽然您可以在RouteValues中传递控制器和操作,并将“Default”指定为RouteName。
然后你真的可以在视图中做你需要的straigt(假设RouteWrapper类是模型,语法可能稍微关闭但你会明白的):
<%= Html.RouteLink(Model.LinkText, Model.RouteName, Model.RouteValues) %>
希望这有帮助。
编辑:
重新阅读,看到你没有使用帮手。
无论您在何处生成锚标记,都可以将LinkText属性用于内部HTML,并且Routing类中有一个方法可帮助您根据路径名和路径值生成URL。一旦我弄清楚它会如何发展,我会稍微发布一些代码。
再次编辑:
好的,这就是生成锚标记的一般方法:
public string GenerateAnchorTag(ViewContext context, RouteWrapper model)
{
string url = RouteTable.Routes.GetVirtualPath(context, model.RouteName, new RouteValueDictionary(model.RouteValues));
return String.Format("<a href=\"{0}\">{1}</a>", url, model.LinkText);
}
这就是我想要的(你需要包括System.Web.Routing和System.Web.Mvc)。 对于上下文,您需要以某种方式获取请求上下文。我通常在辅助扩展中执行此操作,因此辅助变量已经具有我可以传递的上下文。如果您没有使用帮助程序,则必须找出将RequestContext传递给方法的最佳方法。