2

DropDownList将字符串转换为 guid 时出现此错误。

堆栈跟踪:在 System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result) 在 System.Guid..ctor 的 System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException) (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) 在 System.Web.UI.WebControls.MultiView.OnActiveViewChanged(EventArgs e) 在 System.Web.UI.WebControls.MultiView.set_ActiveViewIndex(Int32 值) 在 System.Web.UI.WebControls.Wizard.set_ActiveStepIndex(Int32 值) 在 Projects_AddProject.proxy_Navigate(对象发件人,HistoryEventArgs e) 在 System.Web.UI.ScriptManager.RaiseNavigate(HistoryEventArgs e) 在 System.Web.UI.ScriptManager.LoadHistoryState(String serverState) 在 System.Web.UI.ScriptManager.RaisePostBackEvent(String eventArgument) 在 System.Web。 UI.ScriptManager.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串事件参数)

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

4

4 回答 4

0

首先检查你是否在回邮时这样做,Page_Load检查

if (!IsPostBack)
{

}

然后检查您选择的值null

if(ddlProjTemplates.SelectedValue != null && ddlProjTemplates.SelectedValue.Length > 0)
{

}
于 2013-09-05T06:05:56.427 回答
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

}
于 2013-09-03T18:50:36.700 回答
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);
}
于 2013-09-03T18:59:07.450 回答
0

建议:打电话

    EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue.ToString()));

你在哪里打电话

    EzProject templateProject = DBAccessProjects.GetProject(tenantID, new Guid(ddlProjTemplates.SelectedValue));

因为 new Guid(String) 是一个有效的方法,但 new Guid(Object) 不是。

于 2013-09-03T19:07:47.310 回答