2013-04-11 28 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> 
}