2013-04-11 59 views
0

我正在使用MVC3(代碼優先),並遇到了一些奇怪的東西。發生這種情況時,我想刪除一個問題。當我寫這個問題的所有方面的頁面時,它的工作正常,但由於我需要在幾個頁面中的相同的東西,我想我把它放在一個單獨的頁面,並與頁面@RenderPage刪除不與@RenderPage一起工作

當我用選項一做,刪除工作完美,但是當我用第二個選項時,刪除不起作用。有人可以請我解釋一下這是怎麼回事,如果我能解決這個問題,那麼我可以使用@RenderPage

爲了澄清我給一些代碼:

選項1

<div class="Question"> 
    <div class="QuestionHeader"> 
     <div class="QuestionTitle">@Html.DisplayFor(model => model.Title)</div> 
     <div class="QuestionDate">@Html.DisplayFor(model => model.Date)</div> 
    </div> 
    <hr /> 
    <div class="display-field">@Html.DisplayFor(model => model.Message)</div> 
    <div class="spacing"> 
    <hr /> 
    <div class="QuestionAuthor>@Html.DisplayFor(model => model.Author)</div> 
</div> 
@using (Html.BeginForm()){ 
    <p class="bottomNav"> 
     <input type="submit" value="Delete" /> | 
     @Html.ActionLink("Back to list", "Index") 
    </p> 
} 

選項2

@RenderPage("~/Views/Shared/_InitQuestion.cshtml") 
@using (Html.BeginForm()){ 
    <p class="bottomNav"> 
     <input type="submit" value="Delete" /> | 
     @Html.ActionLink("Back to list", "Index") 
    </p> 
} 

(我不認爲有任何這裏,但如果你看到一個錯字:對不起,但我不能複製/粘貼代碼,因爲我不是從我的工作計算機上寫的,我敢肯定在我的電腦上沒有任何錯字,我只看到問題的細節罰款與@RenderPage,我只是不能刪除它(不會去控制器的ActionResult,HttpPost部分刪除))

+0

您可能需要在Html.BeginForm中指定控制器/操作。同樣,你沒有在表單中傳遞任何參數,所以你ActionResult可能沒有你正在刪除的問題的線索。 – reinder 2013-04-11 09:33:59

+0

他確實知道哪個問題。我概述了按地位分開的所有問題。只有未回答的問題可以被刪除,所以在該表中有一個帶有參數的ActionLink(「刪除」,「刪除」,新的{id = item.QuestionID}。如果你點擊那個鏈接,你會看到詳細信息。刪除按鈕,這是行不通的)。同樣在ActionResults(get和post)中,他得到了問題的id。就像我說的,whithout @RenderPage刪除工作得很好。但我會嘗試FormMethod.Post。 – 2013-04-11 09:48:07

+0

添加FormMethod .Post to Html.BeginForm does not help。另外把Html.BeginForm(「刪除」,「問題」,FormMethod.Post)什麼都不做。 – 2013-04-11 09:50:16

回答

0

我不知道爲什麼(所以如果有人能解釋它,請做),但對於一些理由是@RenderPage出錯了。我首先編碼選項1,運行它並複製/粘貼源代碼,然後對選項2做同樣的事情。比較兩者,並發現由於某種原因,沒有帶選項2(@RenderPage)的表單標籤。

有人建議使用部分而不是RenderPage,它的工作。所以現在我的代碼是:

@Html.Partial("~/Views/Shared/_InitQuestion.cshtml", Model) 
@using(Html.BeginForm()) 
{ 
    <p class="bottomNav"> 
     <input type="submit" value="Delete" /> | 
     @Htlm.ActionLink("Back to list", "Index") 
    </p> 
} 
+0

我在早期版本的MVC中發現了一個bug如果它在MVC中修復4) – 2013-04-11 12:18:56

+0

部分確實寫成如下:@ Html.Partial(「_ InitQuestion」,Model)。感謝提示ePezhman! – 2013-04-14 18:08:00

0

用戶Html.Partial而不是RenderPage,並且您不需要將整個路徑右移到視圖。當你提交一個表單時,它的特定名字的一些輸入被傳遞給了這個動作,你沒有任何形式並且沒有給動作傳遞任何東西,它應該怎麼知道刪除了什麼?

@Html.Partial("_InitQuestion", Model) 
@using(Html.BeginForm()) 
{ 
    <p class="bottomNav"> 
     <input type="submit" value="Delete" /> | 
     <input type="hidden" value="@(Model.Id)" name="Id" /> 
     @Htlm.ActionLink("Back to list", "Index") 
    </p> 
}