我想知道是否有一种方法可以使用类似于在控制器操作之前发生的内部模型绑定的内置模型绑定.
我的问题是我希望能够控制绑定,因为我不知道要绑定的对象的类型,直到我实际上在控制器操作的上下文中.
我知道我可以继承DefaultModelBinder来执行自定义绑定,但我对已经提供的内容感到满意,并且只是想利用它 - 采用这个理想的例子来了解我所追求的内容:
public ActionResult DoCustomBinding(string modelType)
{
... // logic to determine type to check and create strong 'actual' type
object model = BindModel(actualType);
... // do something with bound model
return View();
}
Run Code Online (Sandbox Code Playgroud)
我已经研究过使用DefaultModelProvider,但不确定这是否是正确的方法,我不知道如何获取ModelBindingContext.
所以我只是要在我们每个不断增长的全局列表(叹息)中添加一个新函数,并注意到最后一个用户使用了一个简单的变量赋值function a(){}.
function aFunction(){
return null;
}
var bFunction = function(){
return null;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个测试,看看它是否有所作为; 它确实如此,但却是一个相互冲突的.(chrome支持简单的功能,而firefox的变量赋值).
Firefox:功能创建(90 +%慢)/创建变量赋值(最快)
Chrome:功能创建(最快)/使用变量赋值创建(70 +%慢)
我明白这是微不足道的,但有任何理由存在差异,是否有更好的方法来做到这一点?
我正在使用带有flags属性的枚举作为跟踪状态的方法.
一个例子如下:
Created = 1
Completed = 2
Dispatched = 4
Run Code Online (Sandbox Code Playgroud)
没有写太严格的东西(如果检查这个,那么,如果检查,执行此操作)我希望能够找到已设置的最高标志,在此示例中:
Item.Status = Status.Created | Status.Completed
Run Code Online (Sandbox Code Playgroud)
神秘的方法将返回2 - 完成后设置的值最高的标志.
GetMaxSetFlagValue(Item.Status) // returns 2
Run Code Online (Sandbox Code Playgroud)
我发现了围绕实际枚举的问题,而不是使用标志的值.我很确定这可以用Linq实现......?
我正在使用其他自定义联系模型类继承的基本联系模型.
public class BaseContactModel
{
[Required(ErrorMessage = "Firstname is required")]
public virtual string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基本联系人模型使用验证属性来标记属性是必需的,但在某些情况下我想要覆盖或停止它.这有可能吗?
public class ContactModel : BaseContactModel
{
[NotRequired]
public override string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用新的验证属性NotRequired来返回true,但看起来属性正在堆叠,因此Required和NotRequired正在运行且验证失败.
在寻找解决方案(我找不到)时,我发现一些不相关的属性具有"继承"属性,但我没有在System.ComponentModel.DataAnnotations中的本机验证属性中看到这一点.
这是一个失败的原因吗?我是否需要推出支持禁用继承的自己的版本?任何帮助非常感谢.
我想测试传递给函数的参数是函数引用但是函数引用是使用传递的bind().
考虑一下要测试的代码(为简洁起见缩短):
initialize: function () {
this.register(this.handler.bind(this));
}
Run Code Online (Sandbox Code Playgroud)
并且这个单元测试检查是否register()被调用handler():
it('register handler', function () {
spyOn(bar, 'register');
bar.initialize();
expect(bar.register.calls.argsFor(0)[0]).toEqual(bar.handler);
});
Run Code Online (Sandbox Code Playgroud)
由于绑定函数的使用,arg不等于函数引用bind()- 如何在仍然使用bind()方法的同时测试正确的函数引用?
注意:这不是特定于茉莉花,我只是认为它是合适的,因为使用的方法.
我正在尝试使用表单dom元素与Mvc中的Ajax.BeginForm帮助程序的OnBegin和OnComplete例程.
目前我有这个:
@using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { OnBegin = "handleOnBegin" }))
Run Code Online (Sandbox Code Playgroud)
但是在OnBegin/OnComplete处理程序中,我想使用表单dom元素 - 这是可能的吗?我已经检查了传递给那些处理程序的参数,我看不到任何东西.
function handleOnBegin(a, b){
var f = <get form>;
animateForm(f);
}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试用处理程序传递'this',但这似乎只是传递了XHR对象(或者类似的东西)......而且,我不愿意传递id并添加更多代码,因为我确信有一种更简单的方法.
我正在运行一些简单的表单测试,其中值是添加字段.
将每个值添加到字段后:
input.SendKeys(value);
Run Code Online (Sandbox Code Playgroud)
我想检查字段中的值是否正确.这可能听起来不寻常,但是该字段可能附加了ajax搜索,如果搜索没有回拨匹配,则该字段将为空.
我已经尝试在发送密钥后测试WebElement的文本值,但它似乎总是为空:
bool match = input.Text.Equals(value);
// input.Text always seems to be an empty string
Run Code Online (Sandbox Code Playgroud)
我正在使用Selenium 2和WebDriver - 还有另一种方法来执行这些检查吗?即使SendKeys成功地将值(实际上在浏览器中)打印到WebElement(文本框)中,WebElement是否为空也有特殊原因吗?
任何帮助将不胜感激.
大家早上好.我一直在思考在我的mvc web应用程序中使用plupload的最佳方法,以便在后端创建时将上传的文件与各自的记录结合起来.
我最后把它归结为以下过程 - 这将适用于新记录和现有记录(想想CMS):
模型(没有不相关属性的粗糙)将如下所示:
public class Record{
public IList<ClientFile> Files {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
客户端文件如下所示:
public class ClientFile{
public string UniqueId{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我的问题在于每次成功上传后我在客户端上拥有的内容(ClientFile的json字符串)以及我如何正确地将其置于隐藏字段并正确绑定,以便我可以在我的模型中准备好客户端文件列表.
我正在思考如何正确构造隐藏字段,以便绑定器知道如何将它们连接到列表,或者做一些自定义反序列化自己将json字符串的集合转换为对象列表.
在我把银行假日周末丢到mvc之前,有没有人有任何智慧.
请考虑以下示例:
namespace Test
{
interface IContract : IContract<object> { }
interface IContract<T>
{
void Definition(T data);
}
public class SomeClass : IContract, IContract<SomeContractClass>
{
public void Definition(SomeContractClass data)
{
// ...
}
}
public class SomeContractClass { }
}
Run Code Online (Sandbox Code Playgroud)
我认为如果Definition(SomeContractClass data)按照MDSN中的规定提供接口,我会满意:
在C#的统一类型系统中,所有类型,预定义和用户定义的引用类型和值类型都直接或间接地从Object继承.
但是编译器要求我明确定义它:
错误1'Test.SomeClass'未实现接口成员'Test.IContract.Definition(object)'
可能重复:
你是否使用花括号进行额外的范围设定?
在C#中浮动花括号
我偶然发现了C#中的以下内容:
if(condition) return true;
{
// perform this if true
}
Run Code Online (Sandbox Code Playgroud)
在调查时,我意识到你可以简单地将花括号应用于代码块,这让我觉得它类似于'范围'代码:
{
string foo = "foo";
}
string foo = "new foo!";
Run Code Online (Sandbox Code Playgroud)
......但事实并非如此.
您有什么好处,功能或用途,为什么要这样做?
我正在使用一个返回属性信息的API。一些文本信息存储在子节点之间,我想将其连接为单个字符串(VARCHAR)。
我的过程是,我通过Web服务获取xml,然后将其传递给proc,该proc提取xml值并将其插入到视图中,这是我返回的xml的代码段:
<properties>
<property propertyid="1234">
<bullets>
<bullet>nice garden</bullet>
<bullet>it smells a bit</bullet>
<bullet>body under the patio</bullet>
</bullets>
</property>
...
</properties>
Run Code Online (Sandbox Code Playgroud)
这是对如何查询xml以从中提取值的一瞥:
INSERT
INTO VProperty
( PropertyId,
Description
)
SELECT P.value('@propertyid', 'INT'),
NULL -- extract all the bullet text values into a single string
FROM @xml.nodes('/properties/property')
Run Code Online (Sandbox Code Playgroud)
在此示例中,我希望能够从xml中提取信息,因此最终结果如下:
PropertyId Description
1234 'nice garden\r\nit smells a bit\r\nbody under the patio
Run Code Online (Sandbox Code Playgroud)
在纯sql / xml中这是否可行?还是在我进入SQL领域之前我需要对xml进行一些预处理?
任何帮助表示赞赏(一如既往)。
是否可以使用带表达式的枚举来反映枚举值?考虑这个假设的例程:
public enum Fruit
{
Apple,
Pear
}
public void Foo(Fruit fruit)
{
Foo<Fruit>(() => fruit);
}
public void Foo<T>(Expression<Func<T>> expression)
{
//... example: work with Fruit.Pear and reflect on it
}
Run Code Online (Sandbox Code Playgroud)
Bar() 会给我关于枚举的信息,但我想使用实际值.
背景:我一直在添加一些辅助方法来返回类型的CustomAttribute信息,并想知道类似的例程是否可以用于枚举.
我完全知道你可以使用枚举类型来获取CustomAttributes.
更新:
我在MVC中使用类似的概念和辅助扩展:
public class HtmlHelper<TModel> : System.Web.Mvc.HtmlHelper<TModel>
{
public void BeginLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression)
{
string name = ExpressionHelper.GetExpressionText(expression);
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,name将是模型的成员名称.我想用枚举做类似的事情,所以名字将是枚举'成员'.这甚至可能吗?
更新示例:
public enum Fruit
{
[Description("I am a pear")]
Pear
}
public void ARoutine(Fruit fruit)
{
GetEnumDescription(() => fruit); …Run Code Online (Sandbox Code Playgroud) var _scriptUrl = [
'vendor/jquery/jquery-1.9.1.min.js',
'vendor/angular/angular.js',
'vendor/angular/angular-cookies.js',
'vendor/bootstrap/js/bootstrap.min.js',
'vendor/bootstrap/js/bootstrap-datepicker.js'
]
var jsElm = document.createElement("script");
jsElm.type = "application/javascript";
for(var i = 0; i < _scriptUrl.length; i++)
{
jsElm.src = _scriptUrl[i];
document.body.appendChild(jsElm);
}
Run Code Online (Sandbox Code Playgroud)
但它总是附加最后一个,请建议.
c# ×5
asp.net-mvc ×4
javascript ×3
.net ×1
asp.net-ajax ×1
dom ×1
enums ×1
forms ×1
generics ×1
inheritance ×1
interface ×1
jasmine ×1
jquery ×1
json ×1
object ×1
sendkeys ×1
sql ×1
unit-testing ×1
xml ×1
xpath ×1
xquery ×1