使用附加字符串将模型从视图传递到控制器

时间:2017-09-04 13:37:47

标签: html .net asp.net-mvc razor

我必须将模型传递给我在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);

        }

1 个答案:

答案 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个值,所以不需要表单。