ASP.NET MVC中用于实现复杂表单的好方法是什么,其中表单的各个部分根据用户的输入显示和隐藏?
我的背景是Webforms.我经常被要求构建表单,用户从下拉列表中选择一个选项,触发一些新字段出现.不同的选择可能会导致出现一组不同的字段.
在过去,我会通过我想要显示或隐藏的字段UpdatePanel的包装器Panel来处理这种情况.隐藏字段时会自动禁用验证.
展望未来,我想利用MVC的基于属性的模型验证,但是可以使验证以其他属性的值为条件吗?
另外,如何处理表单字段块的切换?我知道如何在jQuery中手动完成它,但我希望有一种方法与验证和服务器端代码相关联.
我总体上更喜欢MVC,但我还没弄清楚如何很好地处理这种情况.可能我只需要改变我的想法以更好地适应MVC方法.
我在我当前的Windows Phone项目中使用SterlingDB,我希望能够使用MVVM Light v4中的新SimpleIoC容器从我的应用程序中的各个位置解析Sterling数据库.
但是,我不确定SimpleIoC是否支持注册单例.SterlingDB引擎只应在应用程序首次启动时创建,并且我不希望每次容器注入对它的引用时都会启动新实例.
如果我有不同的方式来思考这个问题,我也很乐意接受替代方案.
我vim在bash启用透明度的全屏终端中运行.(对于笔记本电脑来说,这是一个很好的设置 - 当我离开办公桌时,几乎让我不会错过我的多显示器装置.)
我遇到的麻烦是大多数配色方案,例如优秀的配色方案,desert256在文本背后设置了某种突出的颜色,通常是黑色.净效果是一个大多数透明的终端,每行代码后面都有黑色块,模糊了它们前面的任何东西.
某些默认颜色方案(例如elflord,不执行此操作).背景始终保持透明.
我可以.vimrc在设置后colorscheme删除文本背景颜色后执行设置吗?我使用pathogen插件从GitHub刷新我的配色方案,所以我不想编辑我的本地副本.
我正在尝试UILabel在我的Xamarin.iOS应用程序中创建一个填充.本机Objective-C应用程序中最流行的解决方案是重写drawTextInRect:
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0, 5, 0, 5};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
Run Code Online (Sandbox Code Playgroud)
这看起来很简单,我无法弄清楚如何将其转换为C#.这是我最好的尝试:
internal class PaddedLabel : UILabel
{
public UIEdgeInsets Insets { get; set; }
public override void DrawText(RectangleF rect)
{
var padded = new RectangleF(rect.X + Insets.Left, rect.Y, rext.Width + Insets.Left + Insets.Right, rect.Height);
base.DrawText(padded);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎会移动标签的文本,但它不会调整标签的大小.
我认为主要问题是我找不到相应的Xamarin UIEdgeInsetsInsetRect.
有什么建议?
是否有一个很好的模型可以重用Backbone.js中编写的UI组件?
我的团队维护着一个大型Web应用程序,主要用服务器端代码编写,但我们发现我们正在做越来越多的客户端工作.我们有几个用jQuery编写的大型UI组件,它们实际上太复杂了,只需要一个DOM操作库来维护.我们需要一个客户端应用程序框架.
jQuery插件模型提供的一个好处是易于重用.您可以使用适当的ID创建一些HTML元素并将其连接起来$(function(){}).如果采用Backbone,我们肯定需要用Backbone来实现类似的功能.
大多数示例都展示了如何完全在Backbone中构建应用程序,这很棒,但我们不会很快在JavaScript中重新实现我们的应用程序.我们对客户端框架的使用将局限于复杂的UI控件,其中包含许多业务逻辑.
另一个考虑因素是我们有一个JavaScript捆绑解决方案.我担心将很多Backbone元素捆绑在一起可能意味着我们最终会在后台加载和运行无头控件.
你可以构建Backbone控件并将它们打包为jQuery插件吗?有关这种架构的可用资源吗?
是否有一种直接的方法将新模型项插入backbone.js的中间,Collection然后更新集合View以将新项目包含在正确的位置?
我正在使用控件来添加/删除列表中的项目.每个列表项都有自己的Model和View,和我有一个View对整个采集为好.
每个项目视图都有一个Duplicate按钮,用于克隆项目的模型,并将其插入到单击项目下方索引位置的集合中.
将项目插入集合很简单,但我无法弄清楚如何更新集合视图.我一直在尝试这样的事情:
ListView = Backbone.View.extend({
el: '#list-rows',
initialize: function () {
_.bindAll(this);
this.collection = new Items();
this.collection.bind('add', this.addItem);
this.render();
},
render: function () {
this.collection.each(this.addItems);
return this;
},
addItem: function (item) {
var itemView = new ItemView({ model: item }),
rendered = itemView.render().el,
index = this.collection.indexOf(item),
rows = $('.item-row');
if (rows.length > 1) {
$(rows[index - 1]).after(rendered);
} else {
this.$el.append(rendered);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个实现有点工作,但是当我添加一个新项目时,我会遇到奇怪的错误.我相信我可以解决这些问题,但......
我脑子里有一个声音告诉我,有更好的方法可以做到这一点.必须手动找出插入新的位置 …
我正在开发一个名为Remember the Milk API的小型Chrome扩展程序.谷歌有一个使用Flikr API 的好例子,我正在使用它作为我的扩展的基础.他们的示例在我的浏览器中完美运行(Linux上的最新Chrome).
但是当我换掉Remember the Milk API方法名称和API密钥时,我收到以下错误:
XMLHttpRequest cannot load http://api.rememberthemilk.com/services/rest/?method=rtm.test.echo&api_key=xxxxxxxxxxxxxxxxxxxxxx&name=Test%20task.
Origin chrome-extension://lifnmciajdfhj is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
var req = new XMLHttpRequest();
req.open(
"GET",
"http://api.rememberthemilk.com/services/rest/?" +
"method=rtm.test.echo&" +
"api_key=xxxxxxxxxxxxxxxxxxxxxxxxxx&" +
"name=Test%20task",
true);
req.onload = onResponseReceived;
req.send(null);
function onResponseReceived() {
console.log("It worked.");
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
有没有办法在首次创建新模型时抑制Backbone.js中的模型验证?
在我的应用程序中,我有一个包含任意数量模型的集合,这些模型表示为列表项.用户可以单击每个项目上的按钮,在当前项目下方插入新的空项目.显然,空项目验证失败,因为我不希望以后保存空项目.
当我创建新项目时,我无法知道可能的默认值,因此使用有效数据预先填充新模型似乎不是一个选项.
有什么建议?
更新:在处理与切向相关的问题时,我意识到我使用的是Backbone.js版本0.9.0.当这个版本发布时,其他人遇到了同样的问题,他们在GitHub的这个问题上抱怨.
Jeremy修改了0.9.1中的验证以解决此问题.将(临时)空模型添加到集合中是一个有效的实际用例.您可以在视图中处理新的空模型,但是如果您正在管理像我这样的项目列表,那么除了您的必须收集之外,这会强制您拥有项目视图的集合(包括空的项目视图).有效的模型.对于一个原本简单的场景来说,这是一个非常笨重的解决方法.很高兴这个问题得到解决.
我正在尝试对.ajax()公共Web服务进行jQuery 调用,而我却无法找到正确的语法.
我尝试了几种不同的实现方式.这个:
$.ajax({
url: 'http://www.geognos.com/api/en/countries/info/all.jsonp',
dataType: "jsonp",
success: function() {
alert('JSONP call succeeded!');
}
});
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下错误:
all.jsonp:1 Uncaught ReferenceError: callback is not defined
Run Code Online (Sandbox Code Playgroud)
还有这个:
$.ajax({
url: 'http://www.geognos.com/api/en/countries/info/all.json',
dataType: "json",
success: function() {
alert('JSON call succeeded!');
}
});
Run Code Online (Sandbox Code Playgroud)
失败,出现此错误:
XMLHttpRequest cannot load http://www.geognos.com/api/en/countries/info/all.json. Origin http://localhost:8888 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我通过本地IIS7实例提供页面服务.我也尝试过各种$.getJSON()类似结果的组合.我错过了什么?
更新:我们认为我们有一个解决方案,但是callback is not defined在进行JSONP调用时我仍然会收到错误,即使调用了警报/日志代码.响应URL如下所示:
http://www.geognos.com/api/en/countries/info/all.jsonp?callback=undefined&157148585
Run Code Online (Sandbox Code Playgroud)
并且JSON响应包含如下:
callback({"StatusMsg": "OK", "Results": {"BD": {"Name": "Bangladesh", "Capital": {"DLST": "null", "TD": 6.0, "Flg": 2, …Run Code Online (Sandbox Code Playgroud) backbone.js ×3
ios ×2
iphone ×2
javascript ×2
ajax ×1
asp.net-mvc ×1
autolayout ×1
bash ×1
c# ×1
jquery ×1
json ×1
mvvm-light ×1
uilabel ×1
vim ×1
xamarin.ios ×1