我在DropDownList
中将字符串转换为guid时出现此错误。
堆栈跟踪: System.GuidResult.SetFailure(ParseFailureKind失败,String failureMessageID,Object failureMessageFormatArgument,String failureArgumentName,Exception innerException),位于System.Guid..ctor处的System.Guid.TryParseGuid(String g,GuidStyles flags,GuidResult& result)(String) g)位于System.Web.UI.WebControls.Wizard.MultiViewActiveViewChanged(对象源,EventArgs e)的System.Web.UI.WebControls.Wizard.OnActiveStepChanged(Object source,EventArgs e)上的Projects_AddProject.wizCreateProject_ActiveStepChanged(Object sender,EventArgs e) )在System.Web.UI.WebControls.WultiView.ActStepIndex(Int32值)处的System.Web.UI.WebControls.MultiView.set_ActiveViewIndex(Int32值)处的System.Web.UI.WebControls.MultiView.OnActiveViewChanged(EventArgs e)处System.Web.UI.ScriptManager上System.Web.UI.ScriptManager.LoadHistoryState(String serverState)的System.Web.UI.ScriptManager.RaiseNavigate(HistoryEventArgs e)上的Projects_AddProject.proxy_Navigate(Object sender,HistoryEventArgs e) System.Web.UI.ScriptManager.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)中的.RaisePostBackEvent(String eventArgument)
该方法是wizCreateProject_ActiveStepChanged。我只需要知道如何修复此转换。
以下是我们收到错误的方法:
protected void wizCreateProject_ActiveStepChanged(object sender, EventArgs e)
{
switch (wizCreateProject.ActiveStepIndex)
{
case 0:
if (rbFrmTemp.Checked)
{
int tenantID = TenantUtils.getTenantId(Page);
EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue));
default:
break;
}
}
我在这一行得到错误:
EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue));
我检查过ddlProjectTemplates有这种类型的vaues
<option value="7590aab2-29b9-4262-9982-4403ca7b52f2">Managed Services Agreement</option>
这是正确的Guid格式吗?我该如何解决这个问题?
答案 0 :(得分:0)
我尝试使用
var id = Guid.Parse("7590aab2-29b9-4262-9982-4403ca7b52f2");
它完美无缺。所以罪魁祸首是ddlProjTemplates.SelectedValue并确保它有价值。
使用以下
Guid result;
if(Guid.TryParse(ddlProjTemplates.SelectedValue ,out result)
{
///do your stuff here
}
答案 1 :(得分:0)
我的猜测是你的下拉列表选择在你回发时被删除了,它正在选择下拉列表中的第一件事,这是空的,然后你的GUID转换失败。保护您的GUID转换仅将其应用于非空或非空的值,如下所示:
if(!String.IsNullOrEmpty(ddlProjTemplates.SelectedValue))
{
// Now you know there is some value to attempt to convert
EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue));
}
为了获得更好的保护,请使用Guid.TryParse()
方法而不是Guid
构造函数,如下所示:
Guid newGuid;
if (Guid.TryParse(ddlProjTemplates.SelectedValue, out newGuid))
{
EzProject templateProject = DBAccessProjects.GetProject(tenantID, newGuid);
}
答案 2 :(得分:0)
建议:致电
EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue.ToString()));
你打电话的地方
EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue));
因为新的Guid(String)是一个有效的方法,但新的Guid(Object)不是。
答案 3 :(得分:0)
首先在Page_Load
检查
if (!IsPostBack)
{
}
然后检查null
if(ddlProjTemplates.SelectedValue != null && ddlProjTemplates.SelectedValue.Length > 0)
{
}