ASP.NET MVC 2 - Первая кнопка отправки на сайте не работает - отдых в порядке! - PullRequest
0 голосов
/ 04 октября 2010

Извините за неясное название - я не знаю, как описать эту проблему в одном предложении.Пример кода прояснит ситуацию.

Первая кнопка ВВЕРХ ничего не делает при нажатии.Отдых работает как надо!

Ниже моего представления:

<%@ 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>

Контроллер:

[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");
}

И наконец сгенерированный 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>

Там не должно быть viewstate, должно быть?

Я не вижу там никаких проблем в коде.Может кто-то?

1 Ответ

2 голосов
/ 04 октября 2010

Похоже, где-то (возможно, в вашем Main.Master) у вас есть <form runat="server" />, который все портит.

Имеет смысл, почему ваша первая кнопка не работает - обратите внимание на <form method="post" action="./"> в верхней части вашего вывода - она ​​конфликтует с вашей другой формой и отправляет неправильное действие.

...