Поиск значения флажка, запись в XML-результат - PullRequest
1 голос
/ 05 августа 2010

Я создаю еженедельный шаблон письма в формате HTML (отсюда и странное имя файла) и использую ASP и XML в качестве бэкэнда.XML является префектом, а ASP - нет.

Я собираюсь создать узел XMl со значением notchecked и check в зависимости от того, установлен ли флажок в форме илинет.

Я пытался использовать

If Request.QueryString("promotioncheck") = "on" Then
        Set objField = objDom.createElement("promotioncheck")
        objField.Text = "checked"
        objRecord.appendChild objField
Else
        Set objField = objDom.createElement("promotioncheck")
        objField.Text = "notchecked"
        objRecord.appendChild objField
        End If 

, но когда я это делаю, он не воспринимает изменения и просто выводит галочку, даже если флажок установлен.

Вот мой ASP:

<%
If Request.Form("hidden") = "true" Then
    Dim objDom
    Dim objRoot
    Dim objRecord
    Dim objField
    Dim objFieldValue
    Dim objattID
    Dim objattTabOrder
    Dim objPI
    Dim blnFileExists
    Dim x
    Dim z
    Set objDom = server.CreateObject("Microsoft.XMLDOM")
    objDom.preserveWhiteSpace = True



    blnFileExists = objDom.LoadXML(server.mappath("./")& "/eg"&Day(Date)&"_"&Month(Date)&".xml")


    If blnFileExists = True Then

    For x = 1 To Request.Form.Count

    If instr(1,Request.Form.Key(x),"hidden") = 0 Then
        Set z = objDom.selectNodes("eg/stories/"&Request.Form.Key(x))
        Response.Write(Request.Form.Key(x))
        z.innerText = Request.Form(x)
    End If
Next 
Else

    Set objRoot = objDom.createElement("eg")
    objDom.appendChild objRoot
    Set objRecord = objDom.createElement("stories")
    objRoot.appendChild(objRecord)
    For x = 1 To Request.Form.Count


    If instr(1,Request.Form.Key(x),"hidden") = 0 Then
        Set objField = objDom.createElement(Request.Form.Key(x))
        objField.Text = Request.Form(x)
        objRecord.appendChild objField
    End If
    Next
    If Request.QueryString("promotioncheck") = "on" Then
        Set objField = objDom.createElement("promotioncheck")
        objField.Text = "checked"
        objRecord.appendChild objField
    Else
    Set objField = objDom.createElement("promotioncheck")
        objField.Text = "notchecked"
        objRecord.appendChild objField
        End If
End If
If blnFileExists = False then

    Set objPI = objDom.createProcessingInstruction("xml", "version='1.0'")

    objDom.insertBefore objPI, objDom.childNodes(0)
End If


objDom.save (server.mappath("./")& "/eg"&Day(Date)&"_"&Month(Date)&".xml")



Set objDom = Nothing
Set objRoot = Nothing
Set objRecord = Nothing
Set objField = Nothing
Set objFieldValue = Nothing
Set objattID = Nothing
Set objattTabOrder = Nothing
 Set objPI = Nothing

On Error Resume Next
End If
%>

И вот HTML-форма с флажком

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
     <title>EG Editor</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <script type="text/javascript">
     var number_of_nibs = 1;

     function addnib(){
     number_of_nibs ++;
     var title = document.createElement('h2');
     title.innerHTML = "Story" + number_of_nibs;
     var nibformtitle = document.createElement('p');
     nibformtitle.innerHTML = "Title:<br><input type=\"text\" name=\"nib"+   number_of_nibs +"_title\" style=\"width: 400px;\">";
     var nibformcontent = document.createElement('p');
      nibformcontent.innerHTML = "Content:<br><textarea cols=\"22\" rows=\"7\" name=\"nib"+ number_of_nibs + "_content\" style=\"width: 400px;\"></textarea>";
     var smallnewsdiv = eval("document.getElementById('smallnews')");
      smallnewsdiv.appendChild(title);
      smallnewsdiv.appendChild(nibformtitle);
      smallnewsdiv.appendChild(nibformcontent);
      }


     </script>
     </head>
     <body>
     <h1>EG Editor</h1>
      <p>Welcome to the EG Editor, your one stop shop for making your EG email</p>
     <p>Please Fill out the form like you would any other internet form, press save when your done</p>
     <p>Once you've saved your content, you can then click on the link to the finished product, save the file as HTML (file->save as->html only option when saving), open in word and then Send to yourself (File->Send To->Mail Recipient) and biggity-bam you've got your issue of EG</p>
    <h2>Main Stories</h2>
    <p>Here is where you put in your stuff for your Main stories</p>
    <form name="form1" action="Egbuilder.asp" method="post">
    <table>
    <tr>
    <td>Story One:</td>
    <td>Title: <input type="text" name="mainstory1_title" style="width: 220px"></td>
    <td>Content: <textarea cols="22" rows="7" name="mainstory1" style="width: 220px;"> </textarea></td>
    </tr>
    <tr>
    <td>Story Two:</td>
    <td>Title: <input type="text" name="mainstory2_title" style="width: 220px"></td>
    <td>Content: <textarea cols="22" rows="7" name="mainstory2" style="width: 220px;"></textarea></td>
    </tr>
    <tr>
    <td>Story Three:</td>
    <td>Title: <input type="text" name="mainstory3_title" style="width: 220px"></td>
    <td>Content: <textarea cols="22" rows="7" name="mainstory3" style="width: 220px;"></textarea></td>
    </tr>
    <tr>
    <td>Story Four:</td>
    <td>Title: <input type="text" name="mainstory4_title" style="width: 220px"></td>
     <td>Content: <textarea cols="22" rows="7" name="mainstory4" style="width: 220px;"></textarea></td>
    </tr>
    </table>
    <h2>Promotions</h2>
    <p>If there's a promotion this week then tick the 'show promotion' box, Just pop your words into the box and then copy the Intranet link into the link box.</p>
   <p>Show Promotion? <input type="checkbox" name="promotioncheck" ></p>
   <p>Banner Text:<br>
   <textarea cols="22" rows="7" name="promotiontext" style="width: 400px;"></textarea></p>
   <p>Intranet Link: <br>
  <input type="text" name="promotionlink" style="width: 400px"></p>
  <div id="smallnews">
  <h2>News in Briefs</h2>
  <p>Here is where you add your smaller stories, you can add as many as you want. Just click the green plus button to add another box</p>
  <h3>Story 1</h3>
  <p>Title:<br>
  <input type="text" name="nib1_title" style="width: 400px"></p>
  <p>Content:<br>
 <textarea cols="22" rows="7" name="nib1_content" style="width: 400px;"></textarea>
  </p>
 </div>
 <p><a href="Javascript:addnib()" title="Press this button to add another button"><img src="images/add.jpg" alt="add button" style="width: 30px; height: 30px; border: 0px">Add another Story</a><input type="hidden" name="hidden" value="true"><input style="margin-left: 200px;" type="submit" value="Save" ></p>
</form>
</body>
 </html>

Я уверен, что это действительно просто, и я просто пропустил что-то простое, но любую помощьбудет оценено.спасибо

1 Ответ

1 голос
/ 05 августа 2010

В настоящее время вы получаете проверку продвижения из строки Querystring, но вы отправляете форму, чтобы значение не было в коллекции QueryString.

Вместо этого извлеките значение из коллекции Form следующим образом:

Request.Form("promotioncheck") = "on"

Я не могу вспомнить, какое возвращаемое значение по умолчанию для флажка без атрибута value установлено в классическом asp, поэтому возвращается двойная проверка "on".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...