我添加了3个控制器,对于其中一个控制器,默认情况下索引视图不起作用.
Works(shows index):
http://localhost:1767/Employees/
http://localhost:1767/Employees/Index
http://localhost:1767/Home/
http://localhost:1767/Home/Index
http://localhost:1767/
http://localhost:1767/Companies/Index
Doesn't work(gives 404 error):
http://localhost:1767/Companies/
Run Code Online (Sandbox Code Playgroud)
1)我创建了一个实体框架类库,它是从包含Employees和Companies表的数据库生成的.
2)创建了一个MVC 3空项目.
3)从MVC项目向EF类库项目添加了项目引用.
4)添加了一个控制器,在添加控制器对话框中,我选择了EF模型和其中一个表,并命名为控制器CompaniesController
5)然后我记得我需要一个HomeController,所以我添加了另一个控制器,命名为HomeController,并再次选择了公司实体.
6)最后,我添加了一个EmployeesController,选择了Employees实体.
这是我的Global.asax.cs中唯一的路线:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Run Code Online (Sandbox Code Playgroud)
为什么http:// localhost:1767/Companies / URL不像所有其他控制器一样默认为索引操作?我做了一些练习MVC项目,似乎总是遇到这个问题.员工控制器默认为索引工作正常,即使没有路由告诉它这样做?
编辑:这是我收到的错误:
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, …
Run Code Online (Sandbox Code Playgroud) model-view-controller asp.net-mvc asp.net-mvc-routing asp.net-mvc-3
我有一个转换器,我只想在反序列化时使用.所以我将CanWrite设置为false,这很好,所有序列化都很好.然后,Json字符串包含一个对象图,其中有一个SantaClauseCollection,其中包含一个SantaClause项目数组和一个$ type,表示它们是具体类型的SantaClause.
然而,当它在反序列化时遇到SantaClaus的集合时,它从不调用CanConvert(我有一个断点并看到SantaClausCollection,点击F5继续,然后当遇到SantaClaus集合中的项目时应该再次达到断点,但它没有).当它到达SantaClaus项目时,它不会尝试调用CanConvert.甚至没有为该项调用CanConvert来检查我的转换器是否会处理它,而是尝试反序列化它本身,这将无法工作,因为该类没有默认构造函数,也没有带有属性名匹配约定的构造函数:
无法找到用于类型SantaClaus的构造函数.一个类应该有一个默认的构造函数,一个带参数的构造函数或一个用JsonConstructor属性标记的构造函数.
我明白为什么会出现这个错误,但问题是它表明Json.net试图反序列化该对象,而不是调用CanConvert检查并查看我的转换器是否想要处理反序列化.
为什么没有为集合中的每个项目调用CanConvert?
我的转换器:
class SantaClaus2JsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(SantaClaus);
}
/// <summary>
/// Deserializes a SantaClaus as a SantaClausEx which has a matching constructor that allows it to deserialize naturally.
/// </summary>
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize<SantaClausEx>(reader);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override bool CanRead
{
get
{ …
Run Code Online (Sandbox Code Playgroud) 是否可以获取页面对象,或者只是一个ASP.NET控件,并以某种方式在桌面应用程序中呈现它?
例如,作为桌面应用程序的Visual Studio在设计图层中呈现ASP.NET控件.我想做类似的事情.
编辑:我正在集思广益,如何为一个非常简单的数据输入应用程序创建一个非常简单的设计器.我会有一些自定义的ASP.NET数据输入控件,我希望非专业用户能够看到尽可能接近的页面.所以我希望应用程序中的一个面板显示渲染的控件集合,但面板不需要以任何方式进行交互.也就是说,没有点击和拖动或调整控件等大小.将有表单作者与之交互的标准窗体控件来定义页面的布局.
我将简单地保存他们添加的控件列表以及"设计人员"(非技术专家)提供的其他信息,我将使用该信息稍后通过手动或自动过程创建实际的aspx页面,待定.
我想回答我自己的问题,但我想确保我正确理解.我最初认为当用户在表单中提供值时,在回发时,值是作为Viewstate的一部分提交的,因为TextBox.Text是viewstate的一部分.现在我发现用户提供的值实际上不会在OnLoad事件之后应用于控件.这使我感到困惑,因为我认为viewstate在OnLoad之前(或调用Controls.Add()时)被加载到控件中.我已经浏览了页面上的文档并控制了生命周期几次,我现在才意识到处理回发数据有不同的步骤(这一步没有出现在很多文档中:(
1)因此,在OnLoad事件之后应用用户在字段中输入的值的回发数据,并且在OnLoad事件之前应用Viewstate数据?
2)基本上所有这些意味着在回发时服务器获取TextBox.Text属性的两个值,Viewstate中的属性,就像前一个请求中的"旧"值,以及用户提供的新值.表格?
3).net框架是否应用与Viewstate相同的回发数据,因为它通过它的ID属性找到适当的控件?这很重要,因为我正在动态创建控件,我甚至可能有超时更改结构的表单,需要考虑如何处理ID.到目前为止,我还没有设置ID属性,一切正常,但事情可能会更复杂.
4)在客户端根本没有修改viewstate数据吗?或者视图状态与服务器在先前请求中发送的内容相同(假设没有篡改)?我的印象曾经是服务器将所有控件属性编码到视图状态中,而在客户端提交表单时,视图状态字段被解码,修改,编码并提交给服务器并进行修改.我假设有一堆javascript为我做这一切.现在我觉得我错了.相反,Viewstate似乎永远不会在客户端更改,并且所有客户端更改都在回发数据中,以便下一个请求服务器加载视图状态,加载回发,并在下一个响应中提供新的更新视图状态?
我想使用SSIS包配置来更改几个平面文件目标的路径,但只改变路径,而不是文件名.基本上我有很多平面文件进入同一目录,但每个文件都有自己的名字.不幸的是,平面文件对象上的属性包括文件名和目录作为一个字符串.我想设置它以便很容易更改所有这些目录,但是它们仍然有自己唯一的文件名.
有任何想法吗?这可以用表达式以某种方式完成吗?
如果我有以下表格::
Parent
has ParentId
Child
:has ChildId
和ParentId
Grandchild
:has GrandchildId
,ChildId
andQuantity
什么是检索父母列表的最佳方法,他们有一个数量大于10的孙子(例如)?
我和linq一起玩实体,生成类似的东西:
context.Parent.Includes("Children").Include("GrandChildren").Where( ... )
Run Code Online (Sandbox Code Playgroud)
但是不确定语法,我想知道性能 - 包括加载所有对象吗?实现这一目标的最佳方法是什么?
如果动态构建UNC路径,应使用哪些技术,以便将它们约束到特定的根路径.
string root = @"\\Blah\Share\YouStayHere\";
//pretend second string is from a query string a user could manipulate
string path = @"\\Blah\Share\YouStayHere\" + @"..\..\TresspassingQueryString";
if( ! SomeValidation(root, path) ) { throw new Exception("you dirty bastard"...
Run Code Online (Sandbox Code Playgroud)
虽然这可能应该使用权限进行管理,但是可能在同一应用程序中的另一个asp页面的上下文中可以访问其他目录,因此权限不是一个选项.
我知道Request.MapPath可用于在应用程序的目录中保持访问,但这是.NET应用程序虚拟路径之外的共享.
我希望使用Path.Combine解析路径,然后检查以确保pathCombined
开始root
,但Path.Combine将保持....
另外,我想在这种情况下可能会有其他类型的注入,有人可以做,所以我希望有一些更通用的东西,而不仅仅是为".. \"令牌做一个正则表达式.
我有一个动态呈现数据输入表单的简单表单,用户进行回发并将结果保存到数据库中.我已经创建了一个新版本的表单,并根据数据库的一些信息,当用户请求旧表单的URL时,我想做一个Server.Transfer到新的*.aspx页面来生成页面和处理回发.由于页面的URL不会改变,这是否意味着回发被发送到原始页面?我是否需要检查它是否是回发,如果是,那么调用Server.Transfer并允许将表单数据转移到新页面?
如果我尝试在SQL Server 2005中运行此查询:
SELECT 1 WHERE NOT ( 0 )
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
消息4145,级别15,状态1,行1在预期条件的上下文中指定的非布尔类型的表达式,在')'附近.
有时在调试复杂的WHERE语句时,我会通过插入类似于1=1
true的内容来剪切片段并测试特定场景.我宁愿只使用1
或TRUE
但在上述情况下这不起作用.为什么它无法NOT( 0 )
作为布尔表达式进行求值?
编辑:这确实工作正常,表明我不必添加列:
SELECT 1 WHERE NOT(1<>1)
我试图在MVC的EF代码第一个属性上使用这些:http: //msdn.microsoft.com/en-us/library/0c899ak8.aspx
特别:
[DisplayFormat(DataFormatString="##.##%")]
public double? PercentOfSomething {get;set;}
Run Code Online (Sandbox Code Playgroud)
如何将.2345显示为23.45%和.2显示为20% 换句话说,仅显示小数,最多显示两个位置(如果有).
就像现在一样,它只显示格式字符串"##.##%".我猜可能DisplayFormat属性不支持这些类型的格式字符串.
c# ×5
asp.net ×3
asp.net-mvc ×2
.net ×1
formatting ×1
json.net ×1
security ×1
ssis ×1
t-sql ×1