gpt4 book ai didi

c# - ASP.NET MVC2 - 在加载用户控件时检查 IsPostBack 似乎不正确?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:17 25 4
gpt4 key购买 nike

我有一个包含以下代码的用户控件:

<form id="CurrencyForm" method="post" runat="server">    
Display prices in&nbsp;
<asp:DropDownList ID="currency" runat="server" AutoPostBack="true">
<asp:ListItem Value="GBP">GBP (£)</asp:ListItem>
<asp:ListItem Value="USD">USD ($)</asp:ListItem>
<asp:ListItem Value="EUR">EUR (€)</asp:ListItem>
</asp:DropDownList>
</form>

此用户控件包含在我的母版页中,因此它在站点的每个页面上都可用。

这是代码隐藏:

protected void page_load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
currency.SelectedValue = (string)Session["currency"];
}
else
{
session["currency"] = currency.SelectedValue;
Response.Redirect(Request.RawUrl);
}
}

当我更改下拉列表的选择时,会触发回发。但是,IsPostBack 的值似乎始终为 false。我不能完全指出我在这里做错了什么?

解决方案

在查看了大多数帖子的建议后,我明白我使用 code_behind 代码等而不是 Controller 是错误的。我想出了如何使用一个 Action 来基本上重定向回同一页面,所以下面就是我现在所拥有的:

用户控制:

<% using (Html.BeginForm("ChangeCurrency", "Home", FormMethod.Post)) {%>    
Display prices in&nbsp;
<select id="currency" name="currency">
<option value="GBP">GBP (£)</option>
<option value="USD">USD ($)</option>
<option value="GBP">EUR (€)</option>
</select>
<input type="submit" value="change" /> // this is temporary to test the submit
<%} %>

Action

public ActionResult ChangeCurrency(string currency)
{
Session["currency"] = currency;
return new RedirectResult(Request.UrlReferrer.AbsoluteUri);
}

最佳答案

MVC 从不进行回发。因此,IsPostBack 始终正确地为 false。你认为是回发的东西实际上是一个 POST,因为 MVC 不做回发。您根本不应在 MVC 中使用 ASP.NET 服务器控件。

关于c# - ASP.NET MVC2 - 在加载用户控件时检查 IsPostBack 似乎不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com