我已经创建了自定义编辑器模板和显示模板.我已将这些类型中的每一种放在我的views文件夹中的一个文件夹中.这些文件夹被命名为EditorTemplate或DisplayTemplate,具体取决于创建的模板类型.
所以,现在我可以使用EditorFor来使用我的自定义编辑器模板,或者使用DisplayFor作为我的自定义编辑器模板.
我想为LabelFor创建一个自定义模板,但我还没有找到这样的例子.我会在我的Views文件夹中创建一个名为Labeltemplate的文件夹并在此处添加吗?
UPDATE
我试图扩展LabelFor的原因是处理KeyValuePair类型的Property.我想使用此属性的Key作为Label,将值作为Display.我在这里问了一个关于DisplayFor来处理Value的问题.
我的解决方案最终成为>
@Html.DisplayFor(m => m.MyProperty, @Model.MyProperty.Key)
Run Code Online (Sandbox Code Playgroud)
谢谢,
我有一个实现接口的类.我只想检查实现我的接口的属性值.
所以,比方说我有这个界面:
public interface IFooBar {
string foo { get; set; }
string bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而这堂课:
public class MyClass :IFooBar {
public string foo { get; set; }
public string bar { get; set; }
public int MyOtherPropery1 { get; set; }
public string MyOtherProperty2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以,我需要完成这个,没有神奇的字符串:
var myClassInstance = new MyClass();
foreach (var pi in myClassInstance.GetType().GetProperties()) {
if(pi.Name == "MyOtherPropery1" || pi.Name == "MyOtherPropery2") {
continue; //Not interested in these property …Run Code Online (Sandbox Code Playgroud) 我希望有一个解决方案,但最糟糕的情况,解释为什么我的div没有调整大小,这可能是因为我使用的是nav标签.
我有以下HTML.当我的'section'标签内的内容增长时,div与页面内容类一样.但是,当我的导航菜单项增加时,div不会调整大小.
<div class="page-content">
<nav>
<ul>{menu items here}</ul>
</nav>
<section id="main">
{bunch of text here}
</section>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的CSS.
.page-content
{
display: block;
position:relative;
width: 100%;
margin-left: auto;
margin-right: auto;
background-image: url(images/bg-home-main.jpg);
background-repeat: no-repeat;
background-position: center;
}
nav {
display: block;
float: left;
padding: 15px;
position: relative;
margin: 0px 0px 0px -45px;
}
#main {
padding: 5px 25px 5px 25px;
margin-left: 175px;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是div有一个背景图像应该覆盖导航和剖面区域的背景.但是,只有当我的剖面区域比我的导航区域更大(从上到下)时才会发生这种情况,因为div会拉伸以适应剖面大小.但是,如果我的导航区域较大,它实际上会扩展到div之外并在那里扩展图像.
我用一个需要来自模型属性的属性值的方法扩展了HTML帮助器.所以我已经定义了一个自定义属性.
public class ChangeLogFieldAttribute : Attribute {
public string FieldName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的模型中使用它就像这样.
[Display(Name = "Style")]
[ChangeLogField(FieldName = "styleid")]
public string Style { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的帮助方法中,如果属性用于属性,我有以下代码来获取属性的FieldName值.
var itemName = ((MemberExpression)ex.Body).Member.Name;
var containerType = html.ViewData.ModelMetadata.ContainerType;
var attribute = ((ChangeLogFieldAttribute[])containerType.GetProperty(html.ViewData.ModelMetadata.PropertyName).GetCustomAttributes(typeof(ChangeLogFieldAttribute), false)).FirstOrDefault();
if (attribute != null) {
itemName = attribute.FieldName;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我到达此代码时,我得到一个异常,因为containerType为null.
我不确定我是否正在做任何正确的事,但是我从大约4个不同的来源中取得了这一点.如果您可以建议解决我的问题或替代方案,我将不胜感激.
谢谢.
更新解决方案
我使用了Darin Dimitrov的解决方案,虽然我不得不调整它.这是我添加的内容.我必须检查属性metatdata的存在,一切都很好.
var fieldName = ((MemberExpression)ex.Body).Member.Name;
var metadata = ModelMetadata.FromLambdaExpression(ex, html.ViewData);
if (metadata.AdditionalValues.ContainsKey("fieldName")) {
fieldName = (string)metadata.AdditionalValues["fieldName"];
}
Run Code Online (Sandbox Code Playgroud) 我想从表中选择2列,并为每个值分配一个int值.但是,我希望第一列ID对于所有相同的值都相同.
对于第二列,我希望每个值都编号,但是按第一列分区.我已经想出了这篇文章,但我无法让第一部分工作.
这是我正在使用的测试场景.
DECLARE @TestTable as Table (Column1 char(1), Column2 char(1))
INSERT INTO @TestTable SELECT 'A','A'
INSERT INTO @TestTable SELECT 'A','B'
INSERT INTO @TestTable SELECT 'A','C'
INSERT INTO @TestTable SELECT 'B','D'
INSERT INTO @TestTable SELECT 'B','E'
INSERT INTO @TestTable SELECT 'B','F'
INSERT INTO @TestTable SELECT 'B','G'
INSERT INTO @TestTable SELECT 'B','H'
INSERT INTO @TestTable SELECT 'C','A'
INSERT INTO @TestTable SELECT 'C','B'
INSERT INTO @TestTable SELECT 'C','C'
SELECT
Row_Number() OVER (Partition BY Column1 ORDER BY Column1) as Column1_ID,
Column1,
Row_Number() OVER …Run Code Online (Sandbox Code Playgroud) 我已经看到了人们将单个列卷入逗号分隔列表的多个示例,但我还需要更多.
以下是我需要的数据和结果的示例.
DECLARE @SalesPerson table (SalesPersonID int, SalesPersonName varchar(10))
DECLARE @Region table (RegionID int, RegionName varchar(15))
DECLARE @SalesPersonRegion table (SalesPersonID int, RegionID int)
INSERT INTO @SalesPerson (SalesPersonID, SalesPersonName) VALUES (1,'Jeff')
INSERT INTO @SalesPerson (SalesPersonID, SalesPersonName) VALUES (2,'Pat')
INSERT INTO @SalesPerson (SalesPersonID, SalesPersonName) VALUES (3,'Joe')
INSERT INTO @Region (RegionID, RegionName) VALUES (1,'North')
INSERT INTO @Region (RegionID, RegionName) VALUES (2,'South')
INSERT INTO @Region (RegionID, RegionName) VALUES (3,'East')
INSERT INTO @Region (RegionID, RegionName) VALUES (4,'West')
INSERT INTO @SalesPersonRegion (SalesPersonID,RegionID) VALUES (1,1)
INSERT INTO …Run Code Online (Sandbox Code Playgroud) 我在我的网站中定义了以下功能.它适用于某些人,而不适用于其他人.该方法的最后一行发生异常,其中串联是.我相信,因为指定查询字符串的url的问号字符被视为三元运算符.
这里有什么东西我没有看到,或者有更好的方法来构建这个字符串?
url变量的值为:"mywebpage.aspx?AccountNumber = 123456"
function popUp(url) {
var myleft = (screen.width) ? (screen.width - 750) / 2 : 100;
var mytop = (screen.height) ? (screen.height - 300) / 2 : 100;
var id = new Date().getTime();
eval("page" + id + " = window.open(" + url + ", '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=900,height=325, top='" + mytop + "',left='" + myleft +");");
}
Run Code Online (Sandbox Code Playgroud) 我试图将unobtrusive.js包含在我的mvc3视图中,但是当我这样做时,我会在视图呈现时出现一堆错误.例外情况是在不引人注目的脚本中,它在任何地方检查任何与"未定义"相关的内容,就像这一行一样
if(message !== undefined) //Compare against undefined, because an empty message is legal
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
Microsoft JScript运行时错误:'undefined'为null或不是对象
这是我的视图的脚本声明.
<script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.11.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.autocomplete.css")" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud) 我有一个强类型视图Edit,名为OrderModel的模型.在此视图中,我使用的是一个强类型的局部视图,其中包含一个名为OrderTypeModel的模型.部分视图_OrderTypeAutoComplete,包含jqueryui自动完成文本框.如果我使用此代码渲染视图,
public ActionResult Edit(){
return View();
}
Run Code Online (Sandbox Code Playgroud)
我的编辑视图包含以下Razor标记
<div class="editor-field">
@Html.Partial("_OrderTypeAutoComplete")
@Html.HiddenFor(model => model.OrderTypeID)
@Html.ValidationMessageFor(m => m.OrderTypeID)
</div>
Run Code Online (Sandbox Code Playgroud)
我的部分视图包含此剃刀标记
@{
Layout = null;
}
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
@Html.AutoCompleteFor(model => model.OrderTypeID, x => x.OrderType, "Items","Orders")
Run Code Online (Sandbox Code Playgroud)
当我渲染这个时,一切都很棒,我的自动完成效果很好(使用自动完成扩展).无论如何,我需要在我的初始OrderModel中初始化一些东西,所以我将控制器中的代码更改为此.
public ActionResult Edit(){
return View(OrderService.GetInitializedOrderModel()); //returns a new OrderModel
}
Run Code Online (Sandbox Code Playgroud)
现在当我渲染视图时,我得到了异常:传递到字典中的模型项的类型为'Testing.Models.OrderModel',但是这个字典需要一个类型为'Testing.Models.OrderTypeModel'的模型项.
在我的视图中的这一行@ Html.Partial("_ OrderTypeAutoComplete")
当我没有提供OrderModel时,似乎Razor引擎将为视图创建OrderModel,并为部分视图创建OrderTypeModel.这将得到相同的结果.
public ActionResult Edit(){
return View(new OrderModel())
}
Run Code Online (Sandbox Code Playgroud)
我是MVC的新手,所以我不确定这里发生了什么.我只是想在OrderModel模型中为我的视图提供一些简单的下拉值,这些值足够小,我不需要jquery回发来获取.这就是我在我的模型中为Http Get on my Edit操作初始化的值.
任何帮助,将不胜感激.谢谢.
我有一个包含多个链接的页面.这些链接应该做一个ajax帖子和回调.但是,该链接正在执行Get而不是Post.这会导致404错误,因为我没有操作方法来处理请求的URL获取.
如果我从我的Action方法中删除HTTPPost属性,该链接可以正常工作,但是回调失败并且我返回的Json将在新页面中呈现.
这是我在视图中使用的代码.
<td id="action-@item.ItemID">@Ajax.ActionLink("Add", "AddToOrder", new { itemID = item.ItemID }, new AjaxOptions { HttpMethod = "POST", OnSuccess = "actionCompleted" }, new { id = "add-" + item.ItemID })</td>
Run Code Online (Sandbox Code Playgroud)
这最终会添加此HTML:
<td id="action-012679"><a data-ajax="true" data-ajax-method="POST" data-ajax-success="actionCompleted" href="/mysite/neworder/AddToOrder?itemID=012679" id="add-012679">Add to Order</a></td>
Run Code Online (Sandbox Code Playgroud)
我的控制器具有以下操作方法.
[HttpPost]
public JsonResult AddToOrder(string itemID) {
return Json(new { id = itemID, Action = "Added", "Just getting this working"});
}
Run Code Online (Sandbox Code Playgroud)
我在Success上调用的回调方法如下所示:
<script language="javascript" type="text/javascript">
function actionCompleted(response, status, data) {
alert("We have returned");
}
</script>
Run Code Online (Sandbox Code Playgroud)
如果我将操作方法的[HTTPPost]属性更改为[HTTPGet],则会出现Json错误.我可以通过将JsonRequestBehavior.AllowGet添加到我的返回值来解决这个问题,但是这不会使用页面上定义的回调函数而失败.
任何帮助,将不胜感激.
jquery ×2
razor ×2
sql-server ×2
t-sql ×2
c# ×1
css ×1
html5 ×1
javascript ×1
reflection ×1
sql ×1