我有一个永生的物体.我删除了所有可以看到的引用,使用它之后,它仍然没有收集.它的生命周期非常复杂,所以我不能确定所有引用都已被清除.
if ( container.Controls.Count > 0 )
{
var controls = new Control[ container.Controls.Count ];
container.Controls.CopyTo( controls, 0 );
foreach ( var control in controls )
{
container.Controls.Remove( control );
control.Dispose();
}
controls = null;
}
GC.Collect();
GC.Collect(1);
GC.Collect(2);
GC.Collect(3);
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到它仍然有哪些参考?为什么不收集?
如果我的ChangePassword表单包含用户的隐藏ID字段,该怎么办?
BadPerson知道GoodPerson的ID.他用FireBug打开Change Password表单,将他的Id更改为GoodPerson的Id,因此GoodPerson的密码更改.
当然我可以创建一些防止这种情况的服务器逻辑,但我认为应该有一些开箱即用的解决方案,如果隐藏的字段被更改,我会不知道.
提前致谢.
编辑 确定,更改密码是一个糟糕的例子.我在隐藏字段中具有id的任何编辑表单都存在同样的问题.
我已经从mvc 3迁移到mvc 4并遇到以下问题.
@using InvoiceDocflow.Controllers
@{
Response.ContentType = "text/xml";
}
<?xml version="1.1" encoding="UTF-8" ?>
<dc>
@foreach (var dcLink in (IEnumerable<DcLink>)ViewData["SupportedDcs"])
{
<link rel="@dcLink.RelUri.ToString()" href="@dcLink.DcUri.ToString()" />
}
</dc>
Run Code Online (Sandbox Code Playgroud)
这是我的观点.我的布局只有一行
@RenderBody()
Run Code Online (Sandbox Code Playgroud)
所以在mvc 3 <?xml version="1.1" encoding="UTF-8" ?>出现在第一行,但现在,它出现在第二行,第一行留空.

我可以在第一行渲染它,因为它在mvc 3中吗?
顺便说说.
@using InvoiceDocflow.Controllers
@{
Response.ContentType = "text/xml";
}<?xml version="1.1" encoding="UTF-8" ?>
Run Code Online (Sandbox Code Playgroud)
这可行,但这不是我想做的事情.
SQL中有运算符
SELECT * FROM MyTable WHERE id IN (1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
在C#中是否有类似的sintax,我的意思是
if(variable in (1, 2, 3, 4, 5)){
}
Run Code Online (Sandbox Code Playgroud) 我有自己的html助手扩展,我用这种方式
<%=Html.LocalizableLabelFor(model => model.Reason_ID, Register.PurchaseReason) %>
Run Code Online (Sandbox Code Playgroud)
宣称是这样的.
public static MvcHtmlString LocalizableLabelFor<T>(this HtmlHelper<T> helper, Expression<Func<T, object>> expr, string captionValue) where T : class {
return helper.LocalizableLabelFor(ExpressionHelper.GetExpressionText(expr), captionValue);
}
Run Code Online (Sandbox Code Playgroud)
但是当我在调试器中打开它时,expr.Body.ToString()会显示Convert(model.Reason_ID).但应该是model.Reason_ID.这是一个很大的问题,因为ExpressionHelper.GetExpressionText(expr)返回空字符串.那是多么奇怪的魔力?我怎么能摆脱它?
<httpHandlers>
<add path="ajaxpro/*.ashx" verb="POST,GET" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" />
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" />
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
我在集成模式下遇到了iis7.5的问题.当我在经典模式处理程序中使用它时,上面提到的工作正常,但如果我切换到集成管道 - 所有应该处理的请求返回404错误.为什么?
在MVC中获取URL(相对或绝对)的最简单方法是什么?我在这里看到了这个代码,但它似乎有点冗长,并没有枚举RouteTable.
例:
List<string> urlList = new List<string>();
urlList.Add(GetUrl(new { controller = "Help", action = "Edit" }));
urlList.Add(GetUrl(new { controller = "Help", action = "Create" }));
urlList.Add(GetUrl(new { controller = "About", action = "Company" }));
urlList.Add(GetUrl(new { controller = "About", action = "Management" }));
Run Code Online (Sandbox Code Playgroud)
附:
protected string GetUrl(object routeValues)
{
RouteValueDictionary values = new RouteValueDictionary(routeValues);
RequestContext context = new RequestContext(HttpContext, RouteData);
string url = RouteTable.Routes.GetVirtualPath(context, values).VirtualPath;
return new Uri(Request.Url, url).AbsoluteUri;
}
Run Code Online (Sandbox Code Playgroud)
检查RouteTable并获取给定控制器和操作的URL的更好方法是什么?
无法理解这句话的意思.论坛上的人建议彼此在HTTP.sys中保留网址,但这是什么意思?它是为了什么?它是如何工作的?它全部来自HttpWebRequest uac问题.
我知道在c#中使用class关键字的2个地方.
但有什么我错过了吗?这对我来说很重要,因为我正在编写一个程序,它会计算文件中的类.在msdn或C#规范中找不到任何信息.
#if class
partial class C<T> where T : class
{
// class!
int @class = 123;
string c = "class";
}
partial class C<T> where T : class {}
#else
partial class D {}
partial class D {}
partial class D {}
#endif
Run Code Online (Sandbox Code Playgroud)
这是几个答案的积累.