2011-11-23 3 views
0

전자 초대장을 만드는 컨트롤을 만들었습니다. 사용자는 자신의 정보를 텍스트 상자에 입력하고 시스템이 해당 정보를 수집하고 전자 메일 용 HTML에 추가 한 다음 전송합니다.ASP.NET 입력 문자열의 형식이 올바르지 않습니다.

모든 부품을 결합 할 때 오류가 발생합니다. 내 코드는 아래와 같습니다.

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SmtpClient smtpClient = new SmtpClient(); 
    MailMessage message = new MailMessage(); 

    MailAddress fromAddress = new MailAddress(YourEmailBox.Text, YourNameBox.Text); 

    message.From = fromAddress; 

    message.To.Add(FriendEmailBox.Text); 
    message.Subject = EmailSubject; 
    message.IsBodyHtml = true; 
    message.Body = "<html>" + string.Format(EmailBody, YourNameBox.Text, PersonalNoteBox.Text) + "</html>"; 
    smtpClient.Send(message); 

    YourNameBox.Text = YourEmailBox.Text = FriendNameBox.Text = FriendEmailBox.Text = PersonalNoteBox.Text = string.Empty; 
    Label1.Text = "Email Successfully sent!"; 

} 
그것은 나에게 입력 문자열을주고있다

이 줄에 올바른 형식 오류가 아니 었 :

message.Body = "<html>" + string.Format(EmailBody, YourNameBox.Text, PersonalNoteBox.Text) + "</body></html>";

당신이 나 좀 도와 주시겠습니까?

+2

는 EmailBody의 가치는 무엇입니까? 그게 당신의 범인입니다 –

+0

EmailBody는 모든 CSS와 마크 업이있는 HTML 형식의 이메일입니다. –

+0

정확히 String.Format 문으로 무엇을하려고합니까? String.Format 함수는 무엇을한다고 생각하십니까? – David

답변

4

왜 그냥 할 : 당신은 예를 들어, "<html>" + string.Format("3","4","5") + "</html>" 생산됩니다, 및 String.format에 전달 3 개 인수를 왜하지 않는

message.Body = string.Format("<html>{0}</html>",EmailBody.Text)

<html>3</html>

+1

+1. 당신은 그걸 잡은 유일한 사람입니다. 나는 그가 String.Format을 잘못 사용하고 있다는 것을 깨닫기 전에 4 번 질문을 잘못 읽었습니다. 오류는 의심 할 여지없이 런타임에서 첫 번째 인수를 유효한 복합 형식 문자열로 바꾸려고 시도한 경우 발생합니다. http://msdn.microsoft.com/en-us/library/d9t40k6d.aspx – David

+0

다른 인수는 선택 사항이므로 사용할 경우를 대비하여 하나의 문으로 모두 형식을 지정하고 싶습니다. –

+0

@CKallemeres - 선택 사항 인 경우에도 여전히 string.Format을 잘못 작성하고 있습니다. 경우에 따라서가 아니라 사용법을 알고 나면 처리해야합니다. 그리고 다른 인수를 사용하기로 결정한 경우에도 string.Format을 변경해야합니다. 올바르지 않기 때문입니다. 데이비드가 제공 한 링크에서 올바른 형식을 찾을 수 있습니다. – Xaisoft

1

대신이 대신해야할까요?

message.Body = "<html>" + string.Format(EmailBody.Text, YourNameBox.Text, PersonalNoteBox.Text) + "</html>"; 

나는 EmailBody 변수가 string.Format가 작동하려면 형식 항목의 정확한 수를 포함하지 않는 것을 추측 할

+0

EmailBody는 모든 CSS와 마크 업이 포함 된 HTML 형식의 전자 메일입니다. –

+0

그래서 문자열 변수이고 컨트롤 이름이 아닙니다. – squillman

+0

예, 나는'message.Body = ""+ string.Format (EmailBody.HtmlEncode(), YourNameBox.Text, PersonalNoteBox.Text) + ""을 시도 할 것이라고 생각했지만, 이것이 효과가 있다고 생각하십니까? –

0

(EmailBody 가정 EmailBody로는 .text 추가는, 텍스트 기반 제어의 일종이다).

1

XaiSoft에서 string.Format()을 잘못 사용하고 있다고 지적 했으므로 다음을 대체하십시오.

message.Body = "<html>" + string.Format(EmailBody, YourNameBox.Text, PersonalNoteBox.Text) + "</html>"; 

: 선택 사항

message.Body = string.Format(@"<html>{0}<br /><br />{1}<br /><br />{2}</html>", 
          EmailBody, YourNameBox.Text, PersonalNoteBox.Text) 

YourNameBox.Text 경우와 PersonalNoteBox.Text, 당신은 단지 4 별도의 라인으로 끝날 것입니다 귀하의 이메일의 끝에 휴식. 그 문제가 어떻게 든 경우, 당신은 항상 너무이 작업을 수행 할 수 있습니다

또한

var name = string.IsNullOrEmpty(YourNameBox.Text) 
       ? string.Empty 
       : string.Format(@"<br /><br />{0}", YourNameBox.Text); 

var personalNote = string.IsNullOrEmpty(YourNameBox.Text) 
         ? string.Empty 
         : string.Format(@"<br /><br />{0}", PersonalNoteBox.Text); 

message.Body = string.Format(@"<html>{0}{1}{2}</html>", EmailBody, name, personalNote); 

편집, 형식 문자열에 사용되는 @ 기호를 확인합니다. 이렇게하면 문제를 일으킬 수있는 이스케이프 문자를 무시하고 문자열을 리터럴로 처리합니다.

0

내 경우에는 String.Replace가 값 insiode html string을 대체 할 때 유일한 방법입니다.

"

{0}". 교체 ("{0}", YourValue는)

관련 문제