2

DropDownList文字列をGUIDに変換しているときに、このエラーが発生します。

スタック トレース: System.Guid.TryParseGuid (文字列 g、GuidStyles フラグ、GuidResult& 結果) で System.Guid.Guid..ctor (文字列 g) Projects_AddProject.wizCreateProject_ActiveStepChanged (オブジェクトの送信者、EventArgs e) で System.Web.UI.WebControls.Wizard.OnActiveStepChanged (オブジェクト ソース、EventArgs e) で System.Web.UI.WebControls.Wizard.MultiViewActiveViewChanged (オブジェクト ソース、 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(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 形式ですか。この問題を解決するにはどうすればよいですか?

4

4 に答える 4

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 変換を保護して、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);
}
于 2013-09-03T18:59:07.450 に答える