2010-10-04 16 views
0

Désolé pour le titre peu clair - Je ne sais pas comment décrire ce problème en une phrase. L'échantillon de code le rendra clair.ASP.NET MVC 2 - Premier bouton de soumission sur le site ne fonctionne pas - reste c'est bien!

Le premier bouton UP ne fait rien lorsque vous cliquez dessus. Le repos fonctionne comme il se doit!

Ci-dessous mon avis:

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Views/Shared/Main.Master" 
    Inherits="System.Web.Mvc.ViewPage<GeekClick.ViewModels.HomeViewModel>" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server"> 
    <title>Beta</title> 
</asp:Content> 
<asp:Content ID="Content1" ContentPlaceHolderID="MainPageLinks" runat="server"> 
    <h2>Najlepsze linki w sieci</h2> 
    <div id="HomePageLinks"> 
     <%foreach (var link in Model.Links) { %> 
      <a href="<%:link.LinkURL %>"><b><%:link.Description %></b></a><br /> 
      <%: Html.ActionLink("details", "Index", "Link", new {id = link.LinkID}, null) %> 
      <% using (Html.BeginForm("UpVote", "Home", new { linkId = link.LinkID }, FormMethod.Post)) {%> 
        <input type="submit" value="UP" /> <% } %> 
      <%: link.Votes %> 
      <% using (Html.BeginForm("DownVote", "Home", new { linkId = link.LinkID }, FormMethod.Post)) {%> 
        <input type="submit" value="DOWN" /> <% } %> 
     <% } %> 
    </div> 
</asp:Content> 

Controller:

[HttpPost] 
public RedirectToRouteResult UpVote(int linkId) 
{ 
    var updateLink = _geekDb.Link.Single(a => a.LinkID == linkId); 
    updateLink.Votes++; 
    _geekDb.SaveChanges(); 

    return RedirectToAction("Index"); 
} 

[HttpPost] 
public RedirectToRouteResult DownVote(int linkId) 
{ 
    var updateLink = _geekDb.Link.Single(a => a.LinkID == linkId); 
    updateLink.Votes--; 
    _geekDb.SaveChanges(); 

    return RedirectToAction("Index"); 
} 

Et enfin généré html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head id="Head1"> 
    <title>Beta</title> 
<title> 
</title></head> 
<body> 

    <form method="post" action="./" id="form1"> 

<div class="aspNetHidden"> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1NDk5OTQxMTBkZLMRoMOmMkoaJsHIkFWLWjn7HFSzna1LBeMqvRiCxdDQ" /> 
</div> 
    <div id ="mainPage" > 
    <h2>title</h2> 
    <div id="HomePageLinks"> 
      <a href="Some link"><b>Something                                                                                                                          </b></a><br /> 
      <a href="/Link/Index/1">details</a> 
      <form action="/Home/UpVote?linkId=1" method="post"> 
        <input type="submit" value="UP" /> </form>3 
      <form action="/Home/DownVote?linkId=1" method="post"> 
        <input type="submit" value="DOWN" /> </form> 
      <a href="somelink"><b>Somedesc                                                                                                                           </b></a><br /> 
      <a href="/Link/Index/2">details</a> 
      <form action="/Home/UpVote?linkId=2" method="post"> 
        <input type="submit" value="UP" /> </form>10 
      <form action="/Home/DownVote?linkId=2" method="post"> 
        <input type="submit" value="DOWN" /> </form> 
    </div> 
    </div> 
    </form> 
</body> 
</html> 

Il ne devrait pas être viewstate, devrait être?

Je ne vois aucun problème dans le code. Quelqu'un peut?

Répondre

2

On dirait que quelque part (peut-être dans votre Main.Master) vous avez un <form runat="server" /> qui gâche des choses.

Il est logique que votre premier bouton ne fonctionne pas - notez <form method="post" action="./"> en haut de votre sortie - il s'affronte avec votre autre formulaire et affiche la mauvaise action.

+0

Il y avait une forme dans Main.Master. THX! – karol