关于ASP.NET MVC的一个常见问题是为什么要在ASP.NET Web Forms上使用它?答案通常包括ViewState和干净的URL等.最后,您会发现使用正确的工具来完成工作,并且它们可以用于不同的目的.但是,我不相信我曾经见过这些目的是什么.那么,您何时会在ASP.NET Web窗体上选择ASP.NET MVC,或者在ASP.NET MVC上选择ASP.NET Web窗体?
我有一个ASP.NET Web窗体应用程序.有一个带有TextBox的页面,用户在这些页面中输入搜索词,用于查询数据库.
我知道我需要阻止JavaScript注入攻击.我该怎么做呢?
在MVC我会用Html.Encode.它似乎没有在Web窗体中被识别.
谢谢!
假设我有一个类型为Car的对象,我想将其呈现为HTML:
class Car {
public int Wheels { get; set; }
public string Model { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我不想使用ASP.NET Repeater或ListView控件进行绑定,因为它看起来太冗长了.我只有一个对象.但我仍然希望能够使用数据绑定语法,因此我不必使用标签或文字.就像是:
<div>
Wheels: <%# (int)Eval("Wheels") %><br />
Model: <%# (string)Eval("Model") %>
</div>
Run Code Online (Sandbox Code Playgroud)
有没有人知道那里的控制权呢?
我还没准备好切换到ASP.NET MVC.
不幸的是,DetailsView控件不能满足我的需求,因为它似乎不支持我所追求的模板式语法.它也需要绑定到某种类型的DataSource对象.
我更喜欢Maxim和Torkel建议的解决方案.我会尽力去做.
我一直在使用jquery serialize()函数来序列化表单的值并通过ajax提交它
例如,如果表单名称和id是factoryUsers
var data=$("#factoryUsers").serialize();
现在这适用于具有文本字段,文本区域,简单下拉等的表单.但是当我有多个下拉列表时,事情就会出错,例如,如果我有一个类型的下拉列表
<select size="5" id="factoryUsers" name="factoryUsers" multiple="multiple">
序列化不再正常工作.所以,如果我选择3个用户,我会得到一个查询字符串
factoryUsers=5&factoryUsers=23&factoryUsers=11
将select更改为数组类型也无济于事 factoryUsers[]
任何想法或帮助如何正常工作将是伟大的.
我想使用jquery来限制可编辑div(或表单输入)中的字符数.
我正在将依赖注入框架引入现有的WebForms应用程序(使用Castle Windsor).
我对DI有很深的经验,并且倾向于非常强烈地支持构造函数注入而不是setter注入.如果您熟悉Webforms,您就会知道ASP.Net框架处理页面和控件对象的构造,从而无法进行真正的构造函数注入.
我目前的解决方案是在Global.asax的Application_Start事件中注册容器,并将容器保存为Global中的公共静态变量.然后,我只需在页面中直接解析我需要的每项服务,或在需要时控制它.所以在每个页面的顶部,我最终得到这样的代码:
private readonly IMyService _exposureManager = Global.IoC.Resolve<IMyService>();
private readonly IMyOtherService _tenCustomersExposureManager = Global.IoC.Resolve<IMyOtherService>();
Run Code Online (Sandbox Code Playgroud)
显然,我不喜欢将所有这些对容器的引用分散在我的应用程序中,或者我的页面/控件依赖关系是非显式的,但我还是找不到更好的方法.
在Webforms中使用DI有更优雅的解决方案吗?
我正在使用.NET Framework版本4.5.1的WebForms的新模型绑定功能.我希望实现的是,根据一些条件排除一些双向绑定.
我非常喜欢Scott Guthrie撰写的(希望现在很有名)博客文章系列.我使用Web Forms Model Binding Part 3:更新和验证(ASP.NET 4.5系列)中的第二种方法实现编辑页面
这就是我所拥有的:(简化,在ElementEdit.aspx中):
<asp:FormView runat="server" ID="FormViewElement" RenderOuterTable="false" DefaultMode="Edit" DataKeyNames="ElementId"
ItemType="Business.Entities.Element"
SelectMethod="GetElement"
UpdateMethod="UpdateElement">
<EditItemTemplate>
<asp:Panel runat="server" DefaultButton="ButtonSpeichern">
<fieldset>
/*some databound controls*/
<asp:Panel runat="server" Visible="<%# !Item.CurrentElementData.SomeCondition() %>">
/*more databound controls*/
</asp:Panel>
/*the submit button ("ButtonSpeichern")*/
</fieldset>
</asp:Panel>
</EditItemTemplate>
</asp:FormView>
Run Code Online (Sandbox Code Playgroud)
如您所见,包裹的内部面板上的可见性存在"更多数据绑定控制"的条件.当条件为真时,这些应该仅绑定,并且它们是可见的.否则它们不应该绑定而不能更改值.
更新的工作方式类似于Scott的帖子(简化,在xxPage.cs中),它是Type Element的通用基类:
protected virtual bool UpdateEntity(int id) {
T existing = UseCase.GetItem(id); //gets the original element
TryUpdateModel(existing); //SHOULD NOT update the invisible databound controls, but …Run Code Online (Sandbox Code Playgroud) 在HTML表单中,可以通过在其上定义"disabled"属性来禁用按钮,具有任何值:
<button name="btn1" disabled="disabled">Hello</button>
Run Code Online (Sandbox Code Playgroud)
如果要启用某个按钮,则该属性不应该存在,因为没有定义的值可以将disabled属性设置为启用按钮.
当我想在使用JSP文档(jspx)时启用/禁用按钮时,这会导致我出现问题.由于JSP文档必须是格式良好的XML文档,我无法看到有条件地包含此属性的任何方式,因为以下内容不合法:
<button name="btn1" <%= (isDisabled) ? "disabled" : "" %/> >Hello</button>
Run Code Online (Sandbox Code Playgroud)
虽然我可以使用JSTL if标签复制标签两次以获得所需的效果,但在我的特定情况下,我在按钮上声明了超过15个属性(AJAX的许多javascript事件处理程序属性),因此重复标记将使JSP非常凌乱.
如何在不牺牲JSP可读性的情况下解决这个问题?是否有任何自定义标记可以通过操作输出DOM将属性添加到父级?
我有一个ASP.NET下拉列表,我通过数据绑定填充.我有与我想要选择的列表项目的显示文本相匹配的文本.我显然不能使用SelectedText(仅限getter)而且我不知道索引,所以我不能使用SelectedIndex.我目前正在通过遍历整个列表来选择项目,如下所示:
ASP:
<asp:DropDownList ID="ddItems" runat="server" />
Run Code Online (Sandbox Code Playgroud)
码:
ddItems.DataSource = myItemCollection;
ddItems.DataTextField = "Name";
ddItems.DataValueField = "Id";
foreach (ListItem item in ddItems.Items)
{
if (item.Text == textToSelect)
{
item.Selected = true;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在不迭代所有项目的情况下执行此操作?
我正在接触一个旧的,WebForms project但我早已离开了,现在我已经习惯了MVC.我正试图折射这个项目并提出一个让我疯狂的简单问题......
将.aspx文件包含在另一个文件中的最佳方法是什么?
我不想为此直接拥有很多主文件,我所追求的只是一种类似的@Html.RenderPartial("MyFileName")东西
在一些现有文件中包含文件很难吗?
webforms ×10
asp.net ×6
c# ×4
jquery ×2
asp.net-3.5 ×1
asp.net-mvc ×1
controls ×1
forms ×1
html ×1
html-encode ×1
javascript ×1
jsp ×1
jspx ×1
security ×1
xhtml ×1