2012-07-18 2 views
0

보낸 전자 메일의 제목 필드에있는 쿼리 문자열의 값을 표시해야하는 간단한 연락처 시스템에서 작업하고 있습니다.연락처 메일의 동적 제목

오늘은 내가 시도한 모든 방법으로 작동하지 않아서 광기로 천천히 내려갔습니다.

나는 Ubootstrap (트위터별로 부트 스트랩)을 사용하여 Umbraco 4.7.2를 사용하고 있으며 발견 된 접촉 양식을 수정하고 있습니다. 다음은

@using System.Text 
@using System.Collections.Generic; 
@using Bootstrap.Logic.Utils 
@using umbraco.MacroEngines 
@inherits DynamicNodeContext 
@{ 
    dynamic form = Context.Request.Form.ToDynamic(); 

    if (IsPost) 
    { 
     if (!Context.IsValidAntiForgery()) { ModelState.AddFormError(@Dictionary.InvalidPost); } 
     if (MainHelper.IsEmpty(form.Name)) { ModelState.AddError("name", @Dictionary.FormNameValidation); } 
     if (!MainHelper.IsEmail(form.Email)) { ModelState.AddError("email", @Dictionary.FormEmailValidation); } 
     if (MainHelper.IsEmpty(form.Enquiry)) { ModelState.AddError("enquiry", @Dictionary.FormCommentValidation); } 
    } 

    if (!IsPost || !ModelState.IsValid) 
    { 
    @Html.Raw(library.RemoveFirstParagraphTag(Model.FormText.ToString())) 
    <form method="post" action="@Model.Url"> 
     <fieldset> 
      <legend>@Parameter.subject </legend> 
      <div class="clearfix @Library.If(!ModelState.IsValidField("name"), "error")"> 
      @Html.Label(@Dictionary.FormName, "name") 
      <div class="input">@Html.TextBox("name", form.Name, new { @class = "xlarge" }) 
      @if (!ModelState.IsValidField("name")) 
      { <span class="help-inline">@string.Join(". ", @ModelState["name"].Errors)</span> } 
      </div> 
      </div> 
      <div class="clearfix"> 
      @Html.Label(@Dictionary.AddressName, "address1") 
      <div class="input">@Html.TextBox("address1", form.Address1, new { @class = "xlarge" })</div> 
      </div> 
      <div class="clearfix"> 
      @Html.Label("Add 2", "address2", new { @class = "hide" }) 
      <div class="input">@Html.TextBox("address2", form.Address2, new { @class = "xlarge" })</div> 
      </div> 
      <div class="clearfix @Library.If(!ModelState.IsValidField("email"), "error")"> 
      @Html.Label(@Dictionary.FormEmail, "email") 
      <div class="input">@Html.TextBox("email", form.Email, new { @type = "email", @class = "xlarge" }) 
      @if (!ModelState.IsValidField("email")) 
      { <span class="help-inline">@string.Join(". ", @ModelState["email"].Errors)</span> } 
      </div> 
      </div> 
      <div class="clearfix @Library.If(!ModelState.IsValidField("name"), "error")"> 
      @Html.Label(@Dictionary.FormComment, "enquiry") 
      <div class="input">@Html.TextArea("enquiry", form.Enquiry, new { @rows = 5, @cols = 25, @class = "xlarge" }) 
      @if (!ModelState.IsValidField("enquiry")) 
      { <span class="help-inline">@string.Join(". ", @ModelState["enquiry"].Errors)</span> } 
      </div> 
      </div> 
      @Context.GetAntiForgeryHtml() 
     </fieldset> 
     <div class="actions"> 
      <button id="SubmitForm" type="submit" class="btn">@Dictionary.Send</button> 
     </div> 
    </form> 
    @Html.ValidationSummary(@Dictionary.FormValidationSummary, new { @class = "alert-message block-message error" }) 
    } 
    else 
    { 
     var ok = SendForm(form, @Parameter.subject); 
     if (!ok) 
     { 
      <div id="errorMailSettings"> 
       @Model.ErrorMessage 
      </div> 
     } 
     else 
     { 
      // Set Thankyou text from our contact node 
      <div id="thankYou"> 
       <h2>@Model.ThankYouHeaderText</h2> 
       @Model.ThankYouMessageText 
      </div> 
     } 
    } 
} 

@functions 
{ 
    public bool SendForm(dynamic form, string queryParam) 
    { 
     // Get the variables from the form and set them in strings 
     string strName = Library.StripHtml(form.Name).ToString(); 
     string strAddressLine1 = Library.StripHtml(form.Address1).ToString(); 
     string strAddressLine2 = Library.StripHtml(form.Address2).ToString(); 
     string strEmailFrom = Library.StripHtml(form.Email).ToString(); 
     string strMessage = Library.StripHtml(form.Enquiry).ToString(); 

     // Lets set the values passed in from the Macro 
     string strEmailTo = Model.EmailTo.ToString(); 
     string strEmailSubject = queryParam; 

     var now = DateTime.Now; 
     var strTime = String.Format("{0:HH:mm:ss}", now); 
     var strDate = String.Format("{0:dd/MM/yyyy}", now); 

     // Let's Replace the placeholders in the email message body 
     var strEmailBody = new StringBuilder(Model.EmailBody.ToString()); 
     strEmailBody.Replace("[Name]", strName); // Find and Replace [Name] 
     strEmailBody.Replace("[AddressLine1]", strAddressLine1); // Find and Replace [AddressLine1] 
     strEmailBody.Replace("[AddressLine2]", strAddressLine2); // Find and Replace [AddressLine2] 
     strEmailBody.Replace("[Email]", strEmailFrom); // Find and Replace [Email] 
     strEmailBody.Replace("[Message]", strMessage); // Find and Replace [Message] 
     strEmailBody.Replace("[Time]", strTime); // Find and Replace [Time] 
     strEmailBody.Replace("[Date]", strDate); // Find and Replace [Date] 

     // Now the email is sent out to the owner, lets send out an email 
     // to let the user know we have recieved their email & will respond shortly 
     string strEmailReplySubject = Model.EmailReplySubject.ToString(); 
     var strEmailReplyBody = new StringBuilder(Model.EmailReplyBody.ToString()); 
     strEmailReplyBody.Replace("[Name]", strName); // Find and Replace [Name] 

     return MainHelper.TrySendMail(strEmailTo, strEmailSubject, strEmailBody.ToString()) && MainHelper.TrySendMail(strEmailFrom, strEmailReplySubject, strEmailReplyBody.ToString()); 
    } 
} 

매크로 내 연락처 양식의 cshtml입니다 (코드의 벽은 내가 아는하지만 난 더 많은 정보는보다 나은 그림)

이 @ 통해 매크로 매개 변수에서 쿼리 문자열의 표시 결과 범례 필드의 Parameter.subjet,하지만 더 아래쪽에 @ Parameter.subject strEmailSubject 문자열을 설정하려면 보내기 함수를 시도 할 때 전자 메일에서 빈 필드를 그냥.

도움이 될 것입니다.

+0

실제 매크로 "매개 변수"매개 변수를 추가 한 적이 있습니까? –

+0

예, 매개 변수가 전설 태그의 값으로 사용할 때 필드 세트를 정의하는 매크로 부분에서 작동한다는 것을 알 수 있습니다. – Stjerneklar

답변

0

나는 다음과 같은 일을이 문제를 해결하려면 관리 양식, 그래서 매개 변수를 잡고 양식을 새 텍스트 상자를 만든 다음 ala 그것을 제거했습니다. Library.StripHtml (form.Subject) .ToString(); 이 SendForm 함수를 호출하는 데 사용

1

Aparently 매개 변수가 함수 컨텍스트 내에 없습니다. 내가 함수에 인수로 전달 제안하는 것은 :

내가 @ Parameter.subject 날에 쿼리 문자열을 배치 할 수있는 줄 알았 :

... 

var ok = SendForm(form, Parameter.subject); 

... 

public bool SendForm(dynamic form, string subject) 
{ 
    ... 

    string strEmailSubject = subject; 

    ... 
} 
+0

답장을 보내 주셔서 감사합니다. 방금 시도했지만 아무 것도 없습니다. (위의 코드 업데이트) – Stjerneklar

관련 문제