Guid格式无法识别

时间:2013-09-03 18:42:13

标签: c# asp.net .net string

我在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格式吗?我该如何解决这个问题?

4 个答案:

答案 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)
{

}