我正在使用Page_Load事件中的ChangeMode方法将FormView的CurrentMode设置为插入模式,如下所示:
if(!Page.IsPostBack)
{
MyFormView.ChangeMode(FormViewMode.Insert);
}
Run Code Online (Sandbox Code Playgroud)
在我的FormView插入模板中,我有一个DropDownList控件,其AutoPostBack属性设置为true.我还在插入模板中有几个其他DropDownList和TextBox控件.
每当我更改DropDownList的选择并发生回发时,我将丢失输入到控件中的所有值.奇怪的是,如果我在初始页面加载后的任何时候使用ChangeMode将FormView设置为插入模式我没有问题.我已经使用调试器逐步完成了代码,所有内容似乎都正确地发生了但是在DropDownList的事件处理程序运行之后的某些时候,所有内容似乎都被重置了.
这里发生了什么?
更新:我注意到我的FormView位于div标签内,其中runat ="server"和enableviewstate ="false".一旦我为容器div启用了viewstate,我开始看到一个稍微不同的行为.在第一次回发后,FormView仍然不保留值,但现在后续回发工作正常,并保留值.
任何想法将不胜感激.
我正在尝试创建一个用于更新帐户详细信息的成员页面.我想用成员的数据填充表单,但我不知道如何在EntityDataSource上设置过滤器来限制查询.
当我根据成员ID设置select语句时,我收到错误
Select cannot be set if EnableDelete, EnableInsert, or EnableUpdate is enabled.
我认为这是因为你不能更新投影或其他东西,但是在这周围有什么?
或者我是否必须在Page_Load中运行查询并自己填充表单?
我意识到你可以通过在aspx页面上添加它的属性(即onclick ="Button_Click")以声明方式将事件处理程序分配给formview中的子控件,但是如果我想以编程方式执行此操作,我将如何进行此操作?该控件不会通过Page的Init或Load事件中的FormView.FindControl找到,因此无法在这些阶段中分配.FormView的DataBound事件将允许您查找控件,但是不合适,因为它只发生一次,然后事件不会始终被绑定,并且它不会触发.我不是在问,因为我无法绕过它,我只是想知道它是如何完成的.
干杯.
是否有可能让FormView在其刚刚通过其InsertItemTemplate插入的记录上自动默认为ReadOnly模式?看起来这应该是一些应该自然而然地出现在FormView上的东西.
我试图在基于Django类的视图中处理两个表单.该站点包含一个名为form(基于GET)的表单,用于缩小ListView和第二个表单status_form(基于POST)的列表结果.
两个表单都是必需的,因为ListView返回一个项列表.Form让用户限制选择并status_forms让用户通过模态表单标记不正确的项目(因此它需要在同一模板中).
我的麻烦是,ListView方法没有post,但是FormView.我的类List继承自这两个类,但是当我执行该类时,我收到错误消息:
属性错误:'List'对象没有属性'status_form'
我该如何更改我的实现以允许通过post method?处理第二个表单?
class List(PaginationMixin, ListView, FormMixin):
model = ListModel
context_object_name = 'list_objects'
template_name = 'pages/list.html'
paginate_by = 10 #how may items per page
def get(self, request, *args, **kwargs):
self.form = ListSearchForm(self.request.GET or None,)
return super(List, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.status_form = StatusForm(self.request.POST or None)
if self.status_form.is_valid():
...
else:
return super(List, …Run Code Online (Sandbox Code Playgroud) python django formview django-class-based-views class-based-views
我有一个绑定到ObjectDataSource的FormView.
*ObjectDataSource定义(为简单起见,省略了部分内容)*
<asp:ObjectDataSource
ID="odsHousehold"
runat="server"
TypeName="BLL.Households"
ConflictDetection="OverwriteChanges"
UpdateMethod="UpdateHousehold"
>
<UpdateParameters>
<asp:Parameter Name="sName" Type="String" Direction="Input" />
<asp:Parameter Name="sAddress" Type="String" Direction="Input" DefaultValue="" />
<asp:Parameter Name="sCity" Type="String" Direction="Input" DefaultValue="" />
<asp:Parameter Name="sState" Type="String" Direction="Input" DefaultValue="" />
<asp:Parameter Name="sZip" Type="String" Direction="Input" DefaultValue="" />
</UpdateParameters>
</asp:ObjectDataSource>
Run Code Online (Sandbox Code Playgroud)
*FormView定义(为简单起见,省略了部分内容)*
<asp:FormView
ID="fvHousehold"
runat="server"
DataKeyNames="HouseholdID"
DataSourceID="odsHousehold"
HorizontalAlign = "Left"
>
<EditItemTemplate>
<asp:TextBox ID="txtHouseHoldName" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("HouseholdName") %>'></asp:TextBox>
<asp:TextBox ID="txtAddress" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("Address") %>'></asp:TextBox>
<asp:TextBox ID="txtCity" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("City") %>'></asp:TextBox>
<asp:TextBox ID="txtState" runat="server" MaxLength="50" …Run Code Online (Sandbox Code Playgroud) 我一直在努力让FormViews按照微软预期的方式工作大约一天,并且已经找到了很多很棒的东西.
我可以在ObjectDataSource.Inserting事件处理程序中捕获e.Exception和e.ReturnValue,我甚至可以通过检查e.ObjectInstance来欺骗和检查ObjectDataSource.ObjectDisposing中Object的其他属性......我甚至了解到FormView的插入处理程序在ObjectDisposing处理程序之后运行所以如果发现问题,我仍然有时间对它做出反应并在FormView上将e.KeepInInsertMode设置为true.
我的问题是,似乎用户输入到Insert表单中的值无论如何都被清除.
那么,在插入方法被触发后,如何防止FormView清除?
(使用ASP.NET + VB)
我不认为在这里发布我的代码会真的做得很好,我将不得不修改它以删除机密业务逻辑的东西......所以我现在就跳过它.
编辑:
我找到了一个临时且公认的非常狡猾的解决方案(如果没有人找到真正的解决方案).
我有一个页面变量定义为:
Dim eInsertArgs As FormViewInsertedEventArgs
Run Code Online (Sandbox Code Playgroud)
然后我在ItemInserted处理程序中执行以下操作
If boolInsertErrorOccurred = False Then
e.KeepInInsertMode = True
eInsertArgs = e
Else
eInsertArgs = Nothing
End If
Run Code Online (Sandbox Code Playgroud)
然后在每个控件上我有这样的控件数据绑定事件:
If IsNothing(eInsertArgs) = False Then
Dim _sender As TextBox = sender
_sender.Text = eInsertArgs.Values("_FieldName")
End If
Run Code Online (Sandbox Code Playgroud)
这样做的结果是我在将ASP.NET绑定到默认(空白)模板后将值设置为提交的值.
请帮我找一个不太可怕的解决方案.:)
我有一个 UserControl,包含一个 FormView,包含一个 DropDownList。FormView 绑定到数据控件。
像这样:
<asp:FormView ID="frmEdit" DataKeyNames="MetricCode" runat="server" DefaultMode="Edit" DataSourceID="llbDataSource" Cellpadding="0" >
<EditItemTemplate>
<asp:DropDownList ID="ParentMetricCode" runat="server" SelectedValue='<%# Bind("ParentMetricCode") %>' />
</EditItemTemplate>
<asp:FormView>
Run Code Online (Sandbox Code Playgroud)
我正在尝试从代码隐藏填充 DropDownList。如果这不包含在 FormView 中,我通常只会在 Page_Load 事件中执行它。但是,这在 FormView 中不起作用,只要我尝试这样做,访问代码中的下拉列表,即:
theListcontrol = CType(formView.FindControl(listControlName), ListControl)
Run Code Online (Sandbox Code Playgroud)
...调用FormView的数据绑定机制,当然,它试图将DropDownList绑定到底层数据源,导致**'ParentMetricCode'有一个无效的SelectedValue,因为它不存在于列表中项目。“参数名称:值...”错误,因为尚未填充 DropDownList。
我尝试在 FormView 的 DataBinding() 事件中执行加载,但是:
theListcontrol = CType(formView.FindControl(listControlName), System.Web.UI.WebControls.ListControl)
Run Code Online (Sandbox Code Playgroud)
...失败,因为此时 FormView.Controls.Count = 0。
这是不可能的吗?(我不想使用辅助 ObjectDataSource 将下拉列表绑定到)
我知道这类问题在SO上至少被问了十几次,但我已经完成了我在这里找到的所有先前的问题和答案,而且我找不到任何适用的问题.我在我的页面上使用了几个FormView对象,现在想要添加选项来编辑其中一个.FormView由链接到存储过程的SqlDataSource填充,因此我创建了一个存储过程来更新记录并将其添加到SqlDataSource,现在看起来像这样:
<asp:SqlDataSource ID="TestSqlDataSource" runat="server"
SelectCommandType="StoredProcedure"
ConnectionString="<%$ ConnectionStrings:development %>"
SelectCommand="usp_GetNewTestDetails"
UpdateCommand="usp_UpdateTest"
UpdateCommandType="StoredProcedure"
onupdating="TestSqlDataSource_Updating">
<SelectParameters>
<asp:SessionParameter SessionField="TestID" Name="TestID"/>
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="testId" Type="Int32"/>
<asp:Parameter Name="testerLicense" Type="Int32" />
<asp:Parameter Name="premiseOwner" Type="String" />
<asp:Parameter Name="premiseAddress" Type="String" />
<asp:Parameter Name="premiseCity" Type="String" />
<asp:Parameter Name="premiseState" Type="String" />
<asp:Parameter Name="premiseZip" Type="String" />
<asp:Parameter Name="protectionType" Type="String" />
<asp:Parameter Name="testType" Type="String" />
<asp:Parameter Name="repairs" Type="String" />
<asp:Parameter Name="notes" Type="String" />
<asp:Parameter Name="testDate" Type="DateTime" />
<asp:Parameter Name="employerName" Type="String" />
<asp:Parameter Name="employerAddress" Type="String" />
<asp:Parameter Name="phoneNumber" Type="String" />
<asp:Parameter Name="emailAddress" Type="String" …Run Code Online (Sandbox Code Playgroud) 我的表单没有保存我需要它的模型.我的表格:
class RewardForm(forms.Form):
quantity = forms.IntegerField(max_value=10, min_value=1, label=_('quantity'), initial=1)
reward = forms.CharField(max_length=50, label=_('reward'))
reward_denomination = forms.ModelChoiceField(queryset=Reward_Denomination.objects.all(), widget=forms.RadioSelect)
def clean_reward(self):
data = self.cleaned_data.get('reward')
try:
reward = Reward.objects.get(reward_name=data)
except ObjectDoesNotExist:
raise forms.ValidationError(_('Reward does not exist'), code='invalid')
return data
def clean_reward_denomination(self):
data = self.cleaned_data.get('reward_denomination')
try:
denomination = Reward_Denomination.objects.get(denomination=data)
except ObjectDoesNotExist:
raise forms.ValidationError(_('Denomination does not exist'), code='invalid')
return data
def save(self, request, commit=True):
user = request.user
data = self.cleaned_data
'try:
post_reward = data['reward']
post_denomination = data['reward_denomination']
quantity = data['quantity']
except LookupError:
raise Http404
reward …Run Code Online (Sandbox Code Playgroud)