tags:

views:

21

answers:

1

I'm developing a website using EPiServer. I have a form which submits to itself. On submit, I check if there are any fields missing. If yes, then error message is shown.

The problem is that my fields are reset when submitted.

I could check this using jQuery, but I'm not. I'm cheking this from code behind.

I've tried setting EnableViewState=true sevceral places, but no luck.

Here's part of my code:

<asp:Content ID="Content3" ContentPlaceHolderID="RightContentPlaceHolder" runat="server">
  <asp:Panel ID="panelComplaint" runat="server">
    <li>
        <h3>Postnummer*</h3>
        <input id="senderPostCode" name="postCode" type="text" size="20" enableviewstate="true" />
        <asp:Label runat="server" id="lblPostCode" CssClass="missingField" Text="Mangler tekst" Visible="false" />
    </li>
    <li>
        <h3>Post sted*</h3>
        <input id="senderCity" name="city" type="text" size="100" />
        <asp:Label runat="server" id="lblCity" CssClass="missingField" Text="Mangler tekst" Visible="false" />
    </li>
    <li>
      <div class="spacer10px"></div>
      <button type="submit" name="Send" >Send me</button>
    </li>
  </asp:Panel> 
</asp:Content>  

What do I need to do, in order to retain form fields?

+1  A: 

Have you tried adding runat="server" to the input fields? As far as I'm aware, this is needed to ensure that asp.net round-trips data properly. I'm not sure if there's anything specific to EPiServer that would make that differ.

The enableviewstate attribute, unless it's specific to EPiServer, won't actually be doing anything.

If having the ID mashed up by ASP.net is a problem, consider upgrading to .NET 4.0, if you can, as this provides ways for you to control how the ID's are modified. If not, you could try placing a friendly translation into the page that you can then access via JQuery, for example:

<script language="javascript" type="text/javascript">
  function getSenderPostCode() { return eval('<%=senderPostCode.ClientID%>'); }

  var senderPostCodeField = JQuery('#getsenderPostCode');

  alert(senderPostCodeField.length());
</script>

That said, having "getSenderPostCode()" to reference would mean that you could probably skip the step with JQuery of getting a reference to it, so the following would work:

alert(getSenderPostCode().length();

By adding runat="server" to your controls you then wouldn't need to use Request.Form["senderPostCode"].ToString() to access the content of that field, you could instead access it directly:

var contentOfSenderPostCode = senderPostCode.Value.ToString();
Rob
If I do that, I'm not able to retrieve form values using `Request.Form["street"].ToString()`, because .Net changes the field name to `ctl00$MainContentPlaceHolder$RightContentPlaceHolder$senderStreet`...
Steven
Also, I'm not able to use `jQury('#myID')` - again because .NET creates it's own ID.
Steven
@Steven, I've added an update regarding .NET ID mangling =)
Rob
ok, thanks. (And some gibberish since comments must be 15 characters long...)
Steven