在将字符串转换为 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/