Используйте круглые скобки, чтобы быть явным о том, что выражение, как описано в C# Razor Syntax Quick Reference
//www.youtube.com/embed/@(Model.MallVideos.Where(mv => mv.IsFeatured).FirstOrDefault().Video.Code)
HTML Расширение Метод
public static MvcHtmlString FullUrl(this HtmlHelper htmlHelper,
string baseAddress,
string relativeUri,
string innerText = "")
{
Uri baseUri = new Uri(baseAddress);
Uri fullUri = new Uri(baseUri, relativeUri);
var builder = new TagBuilder("a");
builder.MergeAttribute("href", fullUri.ToString());
if (string.IsNullOrEmpty(innerText))
{
builder.InnerHtml = fullUri.ToString();
}
else
{
builder.InnerHtml = innerText;
}
return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}
cshtml
@Html.FullUrl(
"http://www.youtube.com/embed/",
Model.MallVideos.Where(mv => mv.IsFeatured).FirstOrDefault().Video.Code)
в результате Html
<a href="http://www.youtube.com/embed/12345">http://www.youtube.com/embed/12345</a>
Я попытался воспроизвести проблему, и я не в состоянии воспроизвести его, когда я использую круглые скобки.
Модели
namespace Project.Models
{
public class VideosViewModel
{
public List<MallVideo> MallVideos { get; set; }
}
public class MallVideo
{
public bool IsFeatured { get; set; }
public Video Video { get; set; }
}
public class Video
{
public string Code { get; set; }
}
}
Контроллер
public class HomeController : Controller
{
Random rnd = new Random();
public ActionResult Index()
{
var model = new VideosViewModel();
model.MallVideos = GetVideos(10);
return View(model);
}
public List<MallVideo> GetVideos(int length)
{
var videos = new List<MallVideo>();
for (int i = 0; i < length; i++)
{
videos.Add(new MallVideo()
{
IsFeatured = (rnd.NextDouble() > 0.5),
Video = new Video()
{
Code = Path.GetRandomFileName()
}
});
}
return videos;
}
}
Посмотреть
Примечание: http://www.youtube.com/embed/@(Model.MallVideos.Where(mv => mv.IsFeatured).FirstOrDefault().Video.Code)
@model Project.Models.VideosViewModel
<fieldset>
<legend>VideosViewModel</legend>
<p>
http://www.youtube.com/embed/@(Model.MallVideos.Where(mv => mv.IsFeatured).FirstOrDefault().Video.Code)
</p>
<p>
@Model.MallVideos.Where(mv => mv.IsFeatured).FirstOrDefault().Video.Code
</p>
</fieldset>
Результирующего Html
<html>
<body>
<fieldset>
<legend>VideosViewModel</legend>
<p>
http://www.youtube.com/embed/013dq0j5.dr1
</p>
<p>
013dq0j5.dr1
</p>
</fieldset>
</body>
</html>
Это не сработало. Он просто игнорирует его и помещает код в HTML в браузер. Я закончил использование String.concat, чтобы прикрепить результат razore к концу строки, но я все еще надеюсь, что бритва имеет более чистое решение для этого. – Benjishk
Что вы подразумеваете под «кодом как HTML в браузере», можете ли вы вставить пример ожидаемого результата и фактического? Там могут быть лучшие решения на основе того, что вы хотите, например, вы можете решить, что метод расширения будет уместным, я обновил свой ответ с помощью метода расширения. –
Спасибо @DavidMartin, я уточнил вопрос с более подробной информацией. – Benjishk