可以将HTML title
属性添加到输入标记,如下所示:
@Html.TextBoxFor(model => model.Name, new { title = "Customer name" })
Run Code Online (Sandbox Code Playgroud)
静态文本是否有类似的帮助?随着@Html.DisplayFor(model => model.Name)
我可以呈现从模型属性的文本.如何添加HTML属性以便我获得如下span
呈现的标记:
<span title="Customer name">ABC</span>
Run Code Online (Sandbox Code Playgroud) 我有两个带有主键(PK)的SQL Server表和一个链接这两个表的外键(FK):
1) Table "Order"
OrderID, int, PK
AddressID, int, FK
...
2) Table "Address"
AddressID, int, PK
City, nvarchar(50)
...
Run Code Online (Sandbox Code Playgroud)
然后我从这两个表中创建了一个(ADO.NET)实体数据模型.现在,在我的(ASP.NET)网页上,我将GridView与EntityDataSource放在一起.在我的GridView中,我想显示两列:
我怎样才能做到这一点?我的问题是:当我配置实体数据源时,我可以选择"EntitySetName",它可以是"Order"或"Address",但不能同时选择,也不能选择任何类型的关系.如果我选择"Order"作为EntitySetName,那么在GridView中我可以添加列
添加"地址"列会显示空单元格.添加"OrderID"和"Address.AddressID"会显示预期的ID.但是如何将相关地址的"城市"添加到我的GridView?
提前感谢您的帮助!
编辑:澄清:
实体框架创建了一个类"Order"和一个与数据库表对应的类"Address"."Order"类引用"Address"对象作为导航属性,对应于Address和Order表之间的1-n关系.
基本上我想在我的GridView中有一个显示Order.Address.City的列.我试图将带有"Address.City"的绑定字段作为数据字段添加到GridView,但它会导致运行时错误("没有这样的属性......").
我有一个带有ItemTemplate的asp:FormView.我想在FormView中使用一些div元素设计内容:
<asp:FormView ID="MyFormView" runat="server" >
<ItemTemplate>
<div class="block1">
Stuff...
</div>
<div class="block2">
Stuff...
</div>
...
<div class="blockN">
Stuff...
</div>
</ItemTemplate>
</asp:FormView>
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,会创建以下HTML:
<table id="MyFormView" style="border-collapse: collapse;" border="0" cellspacing="0">
<tbody>
<tr>
<td colspan="2">
<div class="block1">
Stuff...
</div>
<div class="block2">
Stuff...
</div>
...
<div class="blockN">
Stuff...
</div>
</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
实际上桌子有点令人不安.我不知道让ItemTemplate自由设置内容然后将其包装到表中的目的是什么.
是否可以禁用或解决此问题?(我在FormView属性中找不到标志.)
某人(可能是机器人)向我的ASP.NET 4.0 Web表单应用程序(在IIS 7.0上运行)发送了带有以下URL的请求:
http://ipaddress-of-my-applications-domain/bla1.bla2.bla3.bla4.bla5:)
这引起了System.Web.HttpException
.我收到了来自我配置的ASP.NET HealthMonitoring的日志邮件,告诉我:
从客户端(:)检测到潜在危险的Request.Path值.
堆栈跟踪是:
System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)
Run Code Online (Sandbox Code Playgroud)
为什么URL中的冒号"有潜在危险"?使用这样的URL可以做些什么危险的事情?我在这里有任何安全漏洞我不知道吗?
感谢提前解释!
编辑
我已经测试过查询字符串(例如http://mydomain.com?Test=9:)
)中的冒号不会导致此异常.
我试图尽可能地遵循WPF应用程序中的MVVM模式,主要是为了能够为我的ViewModel逻辑创建单元测试.
在大多数情况下,ViewModel属性和可视元素属性之间的数据绑定工作正常并且很容易.但有时我遇到的情况是,我无法看到明显和直接的方式,而从代码隐藏访问和操作控件的解决方案非常容易.
这是我的意思的一个例子:将文本片段插入TextBox
当前插入符号位置
由于CaretIndex
它不是依赖项属性,因此无法直接绑定到ViewModel的属性.以下是通过创建依赖项属性来解决此限制的解决方案.而这里是代码隐藏做到这一点的解决方案.在这种情况下,我更喜欢代码隐藏方式.我最近遇到的另一个问题是将动态的列集合绑定到WPF数据网格.在代码隐藏中编程非常简单明了.但对于MVVM友好的数据绑定方法,我只能在几个博客中找到解决方法,这些博客对我来说都很复杂,并且在一个或另一个方面有各种限制.
我不想不惜一切代价保持MVVM架构清除代码隐藏逻辑.如果工作量太大,MVVM友好的解决方案需要大量我不完全理解的代码(我仍然是WPF初学者)并且太耗时我更喜欢代码隐藏解决方案并牺牲我的应用程序的一些部分的自动可测试性.
出于上述实用的原因,我现在正在寻找"模式"来在应用程序中控制使用代码隐藏而不破坏MVVM架构或不破坏它.
到目前为止,我已经找到并测试了两种解决方案.我将使用Caret Position示例绘制粗略的草图:
解决方案1)通过抽象接口为ViewModel提供对View的引用
我将有一个接口与视图实现的方法:
public interface IView
{
void InsertTextAtCaretPosition(string text);
}
public partial class View : UserControl, IView
{
public View()
{
InitializeComponent();
}
// Interface implementation
public void InsertTextAtCaretPosition(string text)
{
MyTextBox.Text = MyTextBox.Text.Insert(MyTextBox.CaretIndex, text);
}
}
Run Code Online (Sandbox Code Playgroud)将此接口注入ViewModel
public class ViewModel : ViewModelBase
{
private readonly IView _view;
public ViewModel(IView view)
{
_view = view;
}
}
Run Code Online (Sandbox Code Playgroud)通过接口方法从ViewModel的命令处理程序执行代码隐藏
public ICommand InsertCommand { get; …
Run Code Online (Sandbox Code Playgroud)我正在使用asp:Menu
具有无表格渲染模式的ASP.NET 4.0 Webforms页面上的控件:
<asp:Menu ID="MenuBase" runat="server" DataSourceID="SiteMapDataSourceMenu"
Orientation="Horizontal" CssClass="contentmenu" RenderingMode="List"
IncludeStyleBlock="false">
</asp:Menu>
Run Code Online (Sandbox Code Playgroud)
菜单有一个水平主行,有5或6个菜单项,当用户将鼠标悬停在菜单项上时,其中一些菜单项打开垂直弹出菜单.
通常当发生任何回发并且页面再次呈现时,菜单"闪烁"一会儿(例如,半秒),这意味着:所有菜单项 - 包括弹出菜单中的项目 - 以一行或多行显示在他们恢复到正常预期状态之前彼此相互对立.
在所有菜单项"展开"显示的这个短暂时刻,菜单看起来如果在浏览器中禁用了Javascript.(似乎构建弹出菜单是通过在asp:menu控件中使用一些Javascript来实现的.)
这种行为非常难看,特别是对于一个大菜单(渲染短时间超过2或3行),整个页面内容在跳回到正常显示之前向下移动.
你知道这个问题的解决方案吗?
先感谢您!
(备注:我应该提一下,在升级到ASP.NET 4.0之前,我使用了CodePlex中着名的CSS友好菜单控件.我认为我不再需要CSS友好控件,因为asp:菜单版本4现在提供了一个内置的List渲染模式.据我所知,我没有使用CSS友好控件的闪烁,我认为这个控件没有使用Javascript.也许这是一个糟糕的一步.我是现在寻找一个解决方案,如果可能的话,不要回到CSS友好的菜单控件.)
编辑:
这种闪烁与浏览器无关,虽然在IE 8和7中最为明显.在IE 7(或IE 8中的兼容模式)中,它非常难看,因为菜单项以疯狂的对角线模式显示,甚至超过5或6行.
我有一个用C#编写的.NET(3.5 SP1)库(DLL).我必须通过类方法扩展此库,该方法具有以下签名:
public byte[] CreateGridImage(int maxXCells, int maxYCells,
int cellXPosition, int cellYPosition)
{
...
}
Run Code Online (Sandbox Code Playgroud)
该方法应该执行以下操作:
maxXCells
并maxYCells
定义X和Y方向上的单元格网格的大小.maxXCells
并且maxYCells
是每个方向上的单元格数.单个细胞是方形的.(所以它是一种不对称的棋盘.)cellXPosition
并cellYPosition
识别此网格中的一个特殊单元格,此单元格必须用十字形填充.byte[]
我对.NET中的图形功能非常不熟悉所以我的问题是:
提前感谢您的建议!
我在为以下示例数据库模式(在SQL Server中)创建实体框架代码优先映射时遇到问题:
每个表都包含一个TenantId
,它是所有(复合)主键和外键(多租户)的一部分.
A Company
是a Customer
或a Supplier
,我尝试通过Table-Per-Type(TPT)继承映射对此进行建模:
public abstract class Company
{
public int TenantId { get; set; }
public int CompanyId { get; set; }
public int AddressId { get; set; }
public Address Address { get; set; }
}
public class Customer : Company
{
public string CustomerName { get; set; }
public int SalesPersonId { get; set; }
public Person SalesPerson { get; set; }
}
public class Supplier : Company
{ …
Run Code Online (Sandbox Code Playgroud) .net inheritance entity-framework table-per-type ef-code-first
我在表结构中做了一些更改,尤其是SQL Server数据库中表之间的关系.现在我想基于这个新的数据库结构更新我的实体模型.
右键单击edmx文件,我找到"从数据库更新模型"选项.但是当我这样做时,我得到了50%的更新:新的列出现在实体类中,但我对模型中仍然存在的许多导航属性感到困惑,尽管相应的外键关系不再存在数据库.(编辑:尽管数据库中的列已被删除,但模型类中的成员也不会被删除.)
难道我做错了什么?或者是否有其他选项来更新模型,包括删除导航属性?或者我是否必须在模型文件中手动删除这些导航属性?
我正在使用实体框架版本1(VS 2008 SP1).
提前感谢您的帮助!
我有一个带有两个子项目的Web解决方案(在VS2010中):
Domain
它包含Model
类(通过Entity Framework映射到数据库表),Services
以及(除了其他东西)负责CRUD操作
WebUI
它引用了Domain项目
对于我创建的第一个页面,我在我强类型视图中直接使用Domain项目中的Model类作为Model,因为类很小,我想显示和修改所有属性.
现在我有一个页面,它只能用于相应域模型的所有属性的一小部分.我通过在Service类中使用查询结果的投影来检索这些属性.但我需要投射到一个类型 - 这里有我能想到的解决方案的问题:
我介绍ViewModels
了WebUI
项目中的哪些内容IQueryables
以及EF data context
从服务公开到WebUI项目.然后我可以直接投射到那些ViewModels.
如果我不想公开IQueryables和EF数据上下文,我将ViewModel
类放在Domain
项目中,那么我可以直接返回ViewModels作为来自Service类的查询和预测的结果.
除了ViewModels
在WebUI
我介绍项目Data transfer objects
,其来自移动查询的数据在服务类的ViewModels
.
解决方案1和2看起来像是相同的工作量,我更倾向于选择解决方案2来将所有数据库问题保存在单独的项目中.但不知何故,在Domain项目中使用View -Model 听起来是错误的.
解决方案3听起来更多的工作,因为我有更多的类来创建和关心Model-DTO-ViewModel映射.我也不明白DTO和ViewModels之间会有什么区别.ViewModels不是我想要显示的Model类的所选属性的集合吗?他们不会包含与DTO相同的成员吗?为什么我要区分ViewModels和DTO?
这三种解决方案中哪一种更可取,有哪些优点和缺点?还有其他选择吗?
感谢您提前的反馈!
编辑(因为我可能有太长的文本墙并且被要求提供代码)
示例:我有一个Customer
实体...
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public City { get; …
Run Code Online (Sandbox Code Playgroud) asp.net ×6
.net ×3
asp.net-4.0 ×2
asp.net-mvc ×2
architecture ×1
c# ×1
code-behind ×1
entity-model ×1
formview ×1
graphics ×1
gridview ×1
html-helper ×1
http ×1
inheritance ×1
jpeg ×1
menu ×1
mvvm ×1
security ×1
url ×1
wpf ×1