我必须将模型传递给我在Controller中的Action,我也需要传递字符串。
类似的东西:
<a class="btn" title="Send" href="@Url.Action("Check","Approve",Model && new{redirectTo = "ShowPDF")">Send</a>
有没有办法做到这一点?(对我来说更好的方式)或者我必须为Model.Redirect增加价值&#34; OnClick&#34;以及如何做到这一点? (不想要的方式)
我的解决方案:
<a class="btn" title="Send" href="@Url.Action("Check","Approve",new { ID =Model.ID,EAN =Model.ID_EAN, ic = Model.invoiceNumber, s = Model.supplier, a = Model.amount, d = Model.dueDate, redirect = "ShowPDF" })">Send</a>
我是这样做的,但对我而言,这种方式在模型更改时非常复杂。
检查行动:
public ActionResult Check(string ic, string s, decimal a, DateTime d, int ID, string EAN, string redirect = "Index")
{
...
return RedirectToAction(redirect);
}
答案 0 :(得分:1)
如果您只想发送模型的少数属性,可以按照您的解决方案进行操作。但是,如果您想发送模型的大量属性,请记住,允许携带的数据查询字符串数量有限(因浏览器而异)。
相反,您应该在表单中发送数据。如果要通过表单发送一些数据,它应该是表单元素。您可以创建输入elemenet或隐藏的输入元素
@using(Html.BeginForm("check","approve"))
{
@Html.HiddenFor(p=>p.ID_EAN)
@Html.HiddenFor(p=>p.ID)
<!-- Add a hidden element for other properties you want to send -->
<input type="hidden" name="redirect" value="ShowPDF" />
<inpu type="submit" />
}
您可以使用与HttpPost操作方法的参数相同的视图模型
[HttpPost]
public ActionResult Check(YourModel model,string redirect)
{
// to do : Return something
}
但...... ,
如果您未更改视图中的任何值,则无需发送整个表单。只需发送实体的唯一Id值(主键),并在HttpPost操作方法中,使用该唯一ID,获取完整实体(查询数据库)并使用它。请记住,您永远不应该信任来自客户端(浏览器)的价值。为此,您可以使用您的解决方案,因为您只发送2个值,所以不需要表单。