c# - 无法识别 Guid 格式

标签 c# asp.net .net string

在将字符串转换为 guid 时,我在 DropDownList 中遇到此错误。

Stack Trace: at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException) at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result) at System.Guid..ctor(String g) at Projects_AddProject.wizCreateProject_ActiveStepChanged(Object sender, EventArgs e) at System.Web.UI.WebControls.Wizard.OnActiveStepChanged(Object source, EventArgs e) at System.Web.UI.WebControls.Wizard.MultiViewActiveViewChanged(Object source, EventArgs e) at System.Web.UI.WebControls.MultiView.OnActiveViewChanged(EventArgs e) at System.Web.UI.WebControls.MultiView.set_ActiveViewIndex(Int32 value) at System.Web.UI.WebControls.Wizard.set_ActiveStepIndex(Int32 value) at Projects_AddProject.proxy_Navigate(Object sender, HistoryEventArgs e) at System.Web.UI.ScriptManager.RaiseNavigate(HistoryEventArgs e) at System.Web.UI.ScriptManager.LoadHistoryState(String serverState) at System.Web.UI.ScriptManager.RaisePostBackEvent(String eventArgument) at System.Web.UI.ScriptManager.System.Web.UI.IPostBackEventHandler.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 有这种类型的值

<option value="7590aab2-29b9-4262-9982-4403ca7b52f2">Managed Services Agreement</option> 

这是正确的 Guid 格式吗?我该如何解决这个问题?

最佳答案

我的猜测是,当您回发时,您的下拉列表选择被丢弃了,它正在选择下拉列表中的第一个东西,它是空的,然后您的 GUID 转换失败。保护您的 GUID 转换,使其仅应用于不为 null 或不为空的值,如下所示:

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);
}

关于c# - 无法识别 Guid 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18599334/

相关文章:

c# - 当前上下文中不存在 OnPropertyChange?

c# - 打印尺寸的所有可能性

c# - 安装 log4net 多个项目

c# - 如何从 ASP.net MVC 程序中获取普通 c# 程序中的 JSON 数据?

c# - 如何在 IIS 中授予对 Web API 应用程序的写入权限?

c# - 通用接口(interface)方法的开放委托(delegate)

c# - 禁用天数 : 5 days after current date on Calendar

ASP.NET "network BIOS command limit has been reached"ASP.NET 2.0 + 3.5

c# - 获取 null 作为整数类型的默认值

c# - Datalogic 条形码/重量扫描仪