我有一些模型,我想在RazorView中渲染html-markup,如下所示:
<a href="@Model.Website">@Model.Title</a>
用户可以在Website
属性(google.com
,www.google.com
,http://www.google.com
等)中写入任何网址。
问题是,如果用户没有编写协议前缀,例如http
,那么生成的HTML将被浏览器视为站点相对URL:
<a href="http://localhost:xxxx/google.com">Google</a>
有没有简单的解决方案,还是我必须在渲染html之前准备网站字符串(添加“http”前缀)?
答案 0 :(得分:5)
这不是特定于MVC的,但您可以使用UriBuilder
类:
string uri = "http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx";
var uriBuilder = new UriBuilder(uri);
uriBuilder.Scheme = "http";
Console.WriteLine(uriBuilder.Uri);
打印http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx
。
string uri = "google.com";
var uriBuilder = new UriBuilder(uri);
uriBuilder.Scheme = "http";
Console.WriteLine(uriBuilder.Uri);
打印http://google.com/
。
答案 1 :(得分:2)
您可以使用[Url]
属性强制用户输入正确的网址。
将此添加到您的模型中:
[Url]
public string Website { get; set; }
这是你的观点。
<div class="editor-field">
@Html.EditorFor(model => model.Website)
@Html.ValidationMessageFor(model => model.Website)
</div>
您可以像这样向用户指定特定的消息:
[Url(ErrorMessage = "You must specify the full url including the protocol i.e. http://www.google.com")]