你能在一个视图中有多个url.actions吗?

时间:2016-04-17 17:28:50

标签: asp.net-mvc

我有两个控制器和两个模型(完全分开)。然后我有一个视图,我使用url.action创建一个使用第一个控制器和模型的新记录。然后我有另一个url.action为另一个控制器和模型创建一个记录。我的问题是,提交一个将提交另一个。使用url.action来显示创建视图是不好的做法 - 因为当我只使用一个url.action时效果很好。或者拥有多个是不好的做法。如果不使用另一种观点,如何实现这一目标呢?

这个观点很简单。 ....

<div>
@*@Html.Action("Create", "MPost", new { TaskId = Model.TaskId, TaskTitle = Model.Title })*@
</div>

<div>
@Html.Action("Vote", "Vote", new { TaskId = Model.TaskId})     
</div>

1 个答案:

答案 0 :(得分:0)

在您的视图中使用多个Html.Action()调用没有任何问题,但是您需要考虑这是否是您使用的最佳选择。

确定您要做的事

Html.Action()将在最初呈现View时调用控制器操作,它将执行View中的任何操作,然后它可能会也可能不会返回另一个View / Partial View。

您在帖子中提到了以下内容:

  

我的问题是提交一个会提交另一个。不好吗   练习使用url.action来显示创建视图 - 因为它   当我只使用一个url.action时效果很好。

这听起来你真的希望这些作为链接起作用,当你点击它们时你想要它们。如果是这种情况,您最好通过Url.Action()Html.ActionLink()帮助创建指向相应操作的链接:

<a href='Url.Action("Create", "MPost", new { TaskId = Model.TaskId, TaskTitle = Model.Title })'>Create New Post!</a>

这些将按照您的预期执行对Controller Action的基本GET请求。如果您需要实际POST个值,那么您应该考虑使用<form>并提交它:

<form action='@Url.Action("Vote", "Vote", new { TaskId = Model.TaskId})'>
      <input type='submit' value='Cast Your Vote!' />
</form>

通常,如果您有两个可能会将值发布到的单独的URL,则应考虑将它们分别放在自己的<form>中,以避免任何混淆或可能发布到错误的区域。使用链接也可以正常工作,但请记住,他们会将用户重定向到您正在执行的Controller Action返回的View。