2015-10-21 63 views
0

我試圖從另一個類訪問某個變量,但是我無法這樣做。我有兩個按鈕 - 第一個按鈕將標記設置爲html模板文件。第二個應該生成文件。第一個按鈕調用該類。第二個按鈕應該調用類生成的字符串。從html模板類訪問字符串

我的第一個按鈕如下:

private void btnTemplate_Click(object sender, EventArgs e) 
    { 
     if ((txtTitle.Text == "") && (txtSku.Text == "") && (txtPrice.Text == "") && (txtDesc.Text == "") && (txtImg.Text == "")) 
     { 
      MessageBox.Show("No row selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     else 
     { 
      OpenFileDialog SetData = new OpenFileDialog(); 
      SetData.Filter = "HTML|*.html;"; 
      GlobalVar.setPath = "C:\\genHtml.html"; 
      var result = SetData.ShowDialog(); 
      DataSet ds = new DataSet(); 

      if (result == DialogResult.OK) 
      { 
       string fileName = SetData.FileName; 
       var template = new HtmlTemplate(@SetData.FileName); 
       var output = template.Render(new 
       { 
        TITLE = txtTitle.Text, 
        SKU = txtSku.Text, 
        PRICE = txtPrice.Text, 
        DESC = txtDesc.Text, 
        IMAGE = txtImg.Text 
       }); 
       File.WriteAllText(@GlobalVar.setPath, output); 
      } 
     } 
    } 

我的第二個按鈕:

private void btnGenerate_Click(object sender, EventArgs e) 
    { 
     try 
     { 


      System.Diagnostics.Process.Start(GlobalVar.setPath); 
     } 
     catch 
     { 
      MessageBox.Show("Please select a template first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

我得到的字符串輸出錯誤。我怎樣才能調用字符串'輸出'的第二個按鈕?

我班如下:

class HtmlTemplate 
{ 
    private string _html; 

    public HtmlTemplate(string templatePath) 
    { 
     using (var reader = new StreamReader(templatePath)) 
      _html = reader.ReadToEnd(); 
    } 

    public string Render(object values) 
    { 
     string output = _html; 
     foreach (var p in values.GetType().GetProperties()) 
      output = output.Replace("[" + p.Name + "]", (p.GetValue(values, null) as string) ?? string.Empty); 
     return output; 
    } 
} 

回答

0

沒有足夠的上下文來確定,但在第二個按鈕,它看起來像output的情況下,不聲明爲一個變量或可能不分配(正確)的價值。

File.WriteAllText(@GlobalVar.setPath, output); 

可能成爲

var template = new HtmlTemplate(@SetData.FileName); 
File.WriteAllText(@GlobalVar.setPath, template.Render(new 
      { 
       TITLE = txtTitle.Text, 
       SKU = txtSku.Text, 
       PRICE = txtPrice.Text, 
       DESC = txtDesc.Text, 
       IMAGE = txtImg.Text 
      }); 

或可替代

var template = new HtmlTemplate(@SetData.FileName); 
var output = template.Render(new 
      { 
       TITLE = txtTitle.Text, 
       SKU = txtSku.Text, 
       PRICE = txtPrice.Text, 
       DESC = txtDesc.Text, 
       IMAGE = txtImg.Text 
      }); 
File.WriteAllText(@GlobalVar.setPath, output); 
+0

第二個會爲我工作。但是,它需要保存@SetData.FileName的var模板。我將如何在另一個按鈕中完成這項工作?這兩種方法都是無效的 - 會不會成爲一個因素?我在最新的編輯中包含了整個方法 – Bjorn

+0

請參閱我的最新編輯。在第二個按鈕處理程序中創建一個'template'實例,就像在第一個按鈕中一樣。 –

+0

如何在第二個按鈕的模板實例中的@SetData.FileName?第二個按鈕如何引用第一個按鈕? – Bjorn