在JavaScript中,我创建了一个像这样的对象:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
Run Code Online (Sandbox Code Playgroud)
如果在运行时之前未确定属性名称,是否可以在初始创建后为此对象添加更多属性?即
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to
//my object?
Run Code Online (Sandbox Code Playgroud) 想象一下,我有一个这样的枚举(仅作为一个例子):
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Run Code Online (Sandbox Code Playgroud)
我如何编写一个例程来将这些值放入System.Web.Mvc.SelectList中,因为枚举的内容将来会发生变化?我想将每个枚举名称作为选项文本,并将其值作为值文本,如下所示:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我能想到的最好的:
public static SelectList GetDirectionSelectList()
{
Array values = Enum.GetValues(typeof(Direction));
List<ListItem> items = new List<ListItem>(values.Length);
foreach (var i in values)
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(Direction), i),
Value = i.ToString()
});
}
return new SelectList(items);
}
Run Code Online (Sandbox Code Playgroud)
但是,这总是将选项文本呈现为"System.Web.Mvc.ListItem".通过这个调试也告诉我,Enum.GetValues()正在返回'Horizontal,Vertical'等而不是0,1,正如我所期望的那样,这让我想知道Enum.GetName()和Enum之间有什么区别.的GetValue().
我正在尝试使用CSS在我的页面上创建一个"灰色"效果,同时在应用程序运行时在前台显示加载框.我通过创建一个100%高度/宽度,半透明的黑色div来实现这一点,它通过javascript打开/关闭其可见性.我觉得这很简单; 但是,当页面内容扩展到屏幕滚动的点时,滚动到页面底部会显示一个不显示灰色的部分.换句话说,div高度的100%似乎适用于浏览器视口大小,而不是实际页面大小.如何使div扩展以覆盖整个页面的内容?我尝试过使用JQuery .css('height','100%')之前切换它的可见性,但这并没有改变任何东西.
这是有问题的div的CSS:
div.screenMask
{
position: absolute;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
z-index: 1000;
background-color: #000000;
opacity: 0.7;
filter: alpha(opacity=70);
visibility: hidden;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试在.NET中编写一个将在泛型集合上运行的扩展方法,并从集合中删除与给定条件匹配的所有项目.
这是我的第一次尝试:
public static void RemoveWhere<T>(this ICollection<T> Coll, Func<T, bool> Criteria){
foreach (T obj in Coll.Where(Criteria))
Coll.Remove(obj);
}
Run Code Online (Sandbox Code Playgroud)
但是,这会抛出InvalidOperationException,"Collection已被修改;枚举操作可能无法执行".这是有意义的,所以我第二次尝试使用第二个集合变量来保存需要删除的项目并反复遍历:
public static void RemoveWhere<T>(this ICollection<T> Coll, Func<T, bool> Criteria){
List<T> forRemoval = Coll.Where(Criteria).ToList();
foreach (T obj in forRemoval)
Coll.Remove(obj);
}
Run Code Online (Sandbox Code Playgroud)
这引发了同样的异常; 我不确定我真的理解为什么'Coll'不再是迭代的集合,为什么不能修改它?
如果有人对如何使这个工作有任何建议,或者更好的方法来实现同样的目标,那就太好了.
谢谢.
我在使用JQuery UI的模态对话框中使用表单时遇到了严重的问题.用户单击链接时将显示该对话框.表单第一次打开时,工作正常; 表单提交到服务器,包含页面通过AJAX更新,对话框关闭.但是,随后尝试使用该表单是问题的起点.
在第二次尝试使用它时,尽管页面内容正在更新,但表单仍与先前提交的值一起提交.即使我导航到应用程序中的其他屏幕然后返回,也会发生这种情况.每次提交后重新呈现的页面内容包括构成对话框的表单,因此提交的"旧"值甚至不再存在于页面标记中.他们被JQuery UI以某种方式'记住'.我不知道如何解决这种行为,这让我发疯.
当内容更新时,如何让JQuery对话框忘记以前的表单提交?
我正在使用JQuery UI 1.7.2和JQuery 1.3.2,并且该应用程序是在ASP.NET MVC 3中构建的(尽管我不相信服务器端存在任何问题).我宁愿不必更新我正在使用的JQuery版本.
相关的JavaScript:
//shows dialog containing form; triggered by clicking a hyperlink
function showForm() {
$('#divForm').dialog({
modal: true,
draggable: false,
resizable: false,
title: summary,
width: 400
});
}
//submits the form; triggered by clicking 'Save' button from the dialog
function save() {
var postData = $('#frmAddNew').serialize();
$.post('/Item/Save', postData, function (response, status) {
$('#divForm').dialog('destroy');
$('#divContent').html(response); //response mark up contains a new 'divForm' element
}, 'html'); …Run Code Online (Sandbox Code Playgroud) 我试图在C#中动态构建表达式树,它被编译并用作LINQ-to-SQL Where()调用的谓词.问题是我试图将一个Enum(使用int作为其底层类型)直接与Int进行比较,但这是失败的错误"成员MyEnumType没有支持的SQL转换".
码:
ParameterExpression param = Expression.Parameter(typeof(MyClass), "obj"); //input parameter - this exposes a property of the Enum type
MemberExpression enumMember = Expression.Property(param, "MyEnumProperty"); //used to get the Enum typed property from the parameter
//MISSING STEP TO CAST THE ENUM OF THE MEMBER EXPRESSION TO AN INT?
BinaryExpression binaryExpr = Expression.Equal(enumMember, Expression.Constant(1));
LambdaExpression<Func<MyClass, bool>> whereClause = Expression.Lambda(binaryExpr, param);
//when whereClause is used to filter LINQ-to-SQL results, the error is thrown
Run Code Online (Sandbox Code Playgroud)
我对表达树很新,我无法弄明白.我试过用
Expression.Convert(enumMember, typeof(int))
Run Code Online (Sandbox Code Playgroud)
作为BinaryExpression的第一部分,但这不能解决它.
任何帮助深表感谢.
我有一些代码可以根据用户输入动态构建一些搜索条件,从而导致Expression<Func<T, bool>>传递给LINQ .Where()方法.当输入存在时它工作正常,但是当输入不存在时,我想创建一个简单的'return false;' 声明,以便不返回任何结果.
下面是我当前的尝试,但是当它传递给.Where()方法时,它会抛出一个NotSupportedException"类型为'Block'的未知LINQ表达式."
var parameter = Expression.Parameter(typeof(T), "x");
var falseValue = Expression.Constant(false);
var returnTarget = Expression.Label(typeof (bool));
var returnFalseExpression = Expression.Block(Expression.Return(returnTarget, falseValue), Expression.Label(returnTarget, falseValue));
var lambdaExpression = Expression.Lambda<Func<T, bool>>(returnFalseExpression, parameter);
Run Code Online (Sandbox Code Playgroud)
如何构建一个可以由LINQ解释的'return false'表达式?
我有一个应用程序,它以加密状态存储一些信息,包括文件和数据库.如何根据纯文本输入计算得到的密文的长度?
加密操作包括使用.NET RijndaelManaged类/算法,然后在存储之前转换为Base64字符串.
我希望能够做的是事先知道加密字符串对于给定输入的长度,以便我可以相应于其加密形式的可用存储空间相应地限制输入的长度(如果这是有意义的话) !).
谢谢
我正在调查涉及将序列化UTC日期转换为JavaScript日期对象的问题; 我已经阅读了关于这个主题的几个问题,但我仍然不清楚.
首先让我说我在英国.如果我举个例子UTC的时代1473805800000,这是Tue, 13 Sep 2016 22:30:00 GMT,然后使用该值来创建一个JavaScript日期:
var date = new Date(1473805800000);
console.log(date);
Run Code Online (Sandbox Code Playgroud)
控制台日志:
Tue Sep 13 2016 23:30:00 GMT+0100 (GMT Summer Time)
Run Code Online (Sandbox Code Playgroud)
即浏览器已经认识到需要为DST添加额外的小时.
我的问题是,如果我在10月30日之后再次运行相同的代码时钟表已经回来了,我是否仍会得到23:30的相同结果,或者它是22:30,好像它是格林尼治标准时间?换句话说,浏览器是否添加了一小时,因为主题日期是DST还是因为我们目前处于夏令时?
我无法通过组策略更改工作站的系统时钟,否则我会及时跳过它并自行测试.
我在尝试使用 CloudFormation 模板创建堆栈时收到以下错误:
资源处理程序返回消息:“类型为‘AWS::ElasticBeanstalk::Environment’且标识符为‘[AppName]-Env-lee-test’的资源不稳定。” (RequestToken:[请求 GUID],HandlerErrorCode:NotStabilized)
该项目是一个 ASP.NET Core 网站,模板包含以下资源:
云形成模板:
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
BuildNumber:
Description: The build number which specified the build of software we want to deploy. This should exist as a folder in the artifacts bucket.
Type: String
Resources:
DashboardApplication:
Type: AWS::ElasticBeanstalk::Application
Properties:
ApplicationName: !Join [ "-", [ "AppName", !Ref AWS::StackName ] ]
Description: App Name Web Dashboard
DashboardAppVersion:
Type: AWS::ElasticBeanstalk::ApplicationVersion
Properties:
ApplicationName: !Ref DashboardApplication
Description: !Join [ …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-elastic-beanstalk
我在ASP.NET MVC Controller类中有一个Action方法,它处理来自相当基本的"创建/编辑用户"页面的表单帖子.我是MVC的新手,所以我一直在关注各种Microsoft教程的代码示例,这是该方法目前的样子:
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Save([Bind(Prefix = "ServiceUser")]ServiceUser SUser)
{
if (SUser.ServiceUserId == 0) //new service user
ServiceUserHelper.AddServiceUser(SUser);
else //update to existing service user
{
using (ProjectDataContext db = DatabaseHelper.CreateContext())
{
this.UpdateModel(db.ServiceUsers.Single(su => su.ServiceUserId == SUser.ServiceUserId), "ServiceUser");
db.SubmitChanges();
}
}
//return a confirmation view
}
Run Code Online (Sandbox Code Playgroud)
这很好用; 但是我的直觉告诉我'ProjectDataContext ...'代码不属于控制器.如果我要将Update功能移动到另一个类(以我使用Insert方法完成的方式),我将失去Controller的UpdateModel()方法的便利性,并且可能最终必须做一些非常详细的事情读取现有实体,更新其属性并提交更改.
所以我的问题是,实现这一目标的最佳方法是什么?LINQ中是否有类似于UpdateModel()的方法可以在提交之前将两个相同类型的实体合并在一起?
谢谢.
c# ×4
.net ×3
javascript ×3
asp.net-mvc ×2
linq-to-sql ×2
ajax ×1
asp.net ×1
collections ×1
cryptography ×1
css ×1
date ×1
dst ×1
enums ×1
html ×1
jquery-ui ×1
linq ×1
security ×1