HTML帮助程序(在MVC2中)的正确语法是什么,用于定义onblur处理程序,其中使用以下代码生成文本框:
<%=Html.TextBox(
"ChooseOptions.AddCount" + order.ID,
(order.Count > 0) ? AddCount.ToString() : "",
new { @class = "{number: true} small-input" }
)
Run Code Online (Sandbox Code Playgroud) 使用适当的视图模板绘制项目的标准MVC示例是:
Html.DisplayFor(m => m.Date)
如果Model对象具有名为Date of DateTime的属性,则返回带有Display/DateTime.ascx模板中的HTML的字符串.
假设您想要执行相同的操作,但无法使用强类型版本 - 您在编译时不知道此View的Model类型.你使用旧的:
Html.Display( "日期");
所以这是困难的部分.
假设模型是IEnumerable.您不知道这些对象在编译时是什么,但在运行时它们恰好是Date类型为Date的对象,如:
public class ModelClass
{
public DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在假设您希望View迭代这些对象并渲染每个对象.如果你所关心的只是价值,你可以做到这一点:
<%
StringBuilder sb = new StringBuilder();
foreach(object obj in (IEnumerable<object>)Model)
{
Type type = obj.GetType();
foreach(PropertyInfo prop in type.GetProperties())
{
// TODO: Draw the appropriate Display PartialView/Template instead
sb.AppendLine(prop.GetValue(obj, null).ToString());
}
}
%>
<%= sb.ToString() %>
Run Code Online (Sandbox Code Playgroud)
我显然采取了一些捷径来保持这个例子的重点.
这就是重点 - 我如何实现我为自己写的TODO?我不只是想获得价值 - 我希望它的格式很好,如Html.Display("Date").但是,如果我只是调用Html.Display("Date"),它会检查Model,这是一个IEnumerable,用于名为Date的属性,它当然没有.Html.Display不会将对象作为参数用作模型(如Html.Display(obj,"Date"),并且我可以找到的所有类和方法都在内部,所以我可以' t调整并直接调用它们.
必须有一些简单的方法来完成我想要做的事情,但我似乎无法找到它.
只是为了确保我清楚 - 这是DateTime.ascx代码的一个例子:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<%= …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何(或者是否可能)编写可以通过以下方式调用的HTML帮助器方法:
@Html.MyHelper("some string parameter", @<text>
<table>
<tr>
<td>some html content in a "template" @Model.SomeProperty</td>
</tr>
</table>
</text>)
Run Code Online (Sandbox Code Playgroud)
这个想法是允许用户创建自己的模板以传递给帮助者.随着一些讨论,我想出了这个代码:
public static MvcHtmlString jQueryTmpl(this HtmlHelper htmlHelper, string templateId, Func<object, HelperResult> template) {
return MvcHtmlString.Create("<script id='" + templateId + "' type='x-jquery-tmpl'>" + template.Invoke(null) + "</script>");
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我不明白为什么或者它是否有意义.有人可以解释<text>实际背景是什么,我怎么能在上面描述的上下文中使用它?
谢谢
我正在尝试将使用 for 循环和 Razor 语法创建的单选按钮分组在一起。这是代码:
@for (var i = 0; i < Model.Sessions.Count(); i++)
{
@Html.HiddenFor(it => it.Sessions[i].Id)
@Html.RadioButtonFor(it => it.Sessions[i].Checkbox, "0", new {@class = "Sessions", @id = id, @name="Sessions"})
@Html.LabelFor(it => it.Sessions[i].Name, Model.Sessions[i].Name)
<span class="time-span"><em>@Model.Sessions[i].StartTime</em><em>@Model.Sessions[i].EndTime</em></span>
<br />
}
Run Code Online (Sandbox Code Playgroud)
for循环内的第三行就是问题所在。基本上名称不会改变,并且始终是“Sessions[x].Checkbox”。复选框是自定义类的属性(布尔)。我似乎无法掌握调试 Razor 内容的窍门,因此任何帮助将不胜感激,我猜这对这里的某人来说将是非常明显的。
编辑 迪米特洛夫的帖子很有帮助。下面是我使用的最终代码。我使用 @class 和 @id 属性,以便能够使用 Javascript 选择最初选择的会话(因为这是编辑,而不是创建表单)。
@for (var i = 0; i < Model.Sessions.Count(); i++)
{
@Html.HiddenFor(it => it.Sessions[i].Id)
var SId = @Model.Sessions[i].Id;
@Html.RadioButtonFor(it => it.selectedSession, Model.Sessions[i].Id, new { id = SId, @class = "Sessions" }) …Run Code Online (Sandbox Code Playgroud) 我有以下代码试图用我自己的 @Html.MyValidationMessageFor(model => model.myfield) 扩展 @Html.ValidationMessageFor 并提供自定义错误 html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;
using System.Linq.Expressions;
namespace Hml.BackEnd.Helpers
{
public static class HtmlHelpers
{
public static MvcHtmlString MyValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
string myContent = "<div>" + htmlHelper.ValidationMessageFor(expression).ToString() + "</div>";
return MvcHtmlString.Create(myContent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译消息:
'System.Web.Mvc.HtmlHelper <Model> 不包含 ValidationMessageFor 的定义,并且没有扩展方法 ValidationMessageFor 接受类型为 'System.Web.Mvc.HtmlHelper < TModel> 的第一个参数是否可以找到您是否缺少 using 或程序集参考。
我无法理解,因为 System.Web.Mvc 在项目引用和使用中。
我注意到一些Razor函数将html内容作为参数,例如:
@section Scripts {
<script type="text/javascript">
$(function() {
alert("aha");
});
</script>
}
Run Code Online (Sandbox Code Playgroud)
这不会立即渲染html内容,而是Razor的Section()系统存储它以供以后渲染.
我想编写自己的帮助函数,以相同的方式接受html内容,例如:
@Html.MyCoolFunction {
<div><stuff><blah>...
dafsdfsa
</blah></stuff></div>
}
Run Code Online (Sandbox Code Playgroud)
我不知道什么语法会起作用,但可能MyCoolFunction会接受一个MvcHtmlString作为参数,我可以用它做我想做的事情.
这可能吗?
我遇到的问题是我从我的数据库返回一张照片记录,这在我的详细信息视图中工作正常.但是在控制器下的细节我也正在编译一个列表对象,我想在我的详细信息视图中显示它,因为它包含相关的其他照片.因此,在视图的底部,它应列出每个引用的照片名称.我正在使用Galleria.Io照片查看器,我想将其插入其中.
当我尝试遍历列表中的每个项目时,我得到:
{"Object reference not set to an instance of an object."}
Run Code Online (Sandbox Code Playgroud)
码
PhotosController
public ActionResult Details(int id = 0)
{
Photos photos = db.FindPhotoById(id);
if (photos == null)
{
return HttpNotFound();
}
List<Photos> photoList = GetImagesFromFilmID(8);
ViewData["NumberOfImages"] = photoList.Count().ToString();
ViewData["PhotoList"] = photoList;
return View(photos);
}
public List<Photos> GetImagesFromFilmID(int filmID = 8 )
{
List<Photos> photos;
photos = (from p in db.Photos
where p.PhotoDescription == "8"
select p).Take(filmID).ToList();
return photos;
}
Run Code Online (Sandbox Code Playgroud)
细节视图
@model TestingMVCQA.Models.Photos
@*@model IEnumerable<TestingMVCQA.Models.Photos>*@
@{
ViewBag.Title = "Details"; …Run Code Online (Sandbox Code Playgroud) 这是我的数据模型,它包括一个自定义验证:
public class MyData : IValidatableObject
{
public int ID { get; set; }
public int number { get; set; }
[Required]
public string text { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (text.Length < number)
{
yield return new ValidationResult(
"Text too short, must be at least: " + number.ToString(),
new[] { "number" });
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我观点的一部分:
<div class="form-group">
<label asp-for="number" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="number" class="form-control" />
<span asp-validation-for="number" class="text-danger" />
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
自定义验证错误文本永远不会显示在 …
我想为一个按钮创建一个 HTML 帮助程序,我想将一些带有该按钮的 javascript(jQuery) 代码注入我的页面。我怎么能做到这一点?
谢谢
在rails项目中,我使用image_tag生成我的图像html元素.
<%= image_tag("test.jpg", :alt => "test image") %>
Run Code Online (Sandbox Code Playgroud)
正在产生
<img src="test.jpg" alt="test image">
Run Code Online (Sandbox Code Playgroud)
这在整个rails项目中都会发生.
是否有其他设置导致此设置的设置?如何让rails始终关闭图像标签?
html-helper ×10
asp.net-mvc ×6
c# ×4
razor ×3
validation ×2
asp.net-core ×1
c#-4.0 ×1
html ×1
image ×1
javascript ×1
xhtml ×1