2017-09-04 92 views
0

我必须将模型传递给Controller中的Action,并且还需要传递字符串。将模型从视图传递到具有附加字符串的控制器

类似的东西:

<a class="btn" title="Send" href="@Url.Action("Check","Approve",Model && new{redirectTo = "ShowPDF")">Send</a> 

是没有办法做到这一点(对我来说更好的办法)还是必须增加价值Model.Redirect“onclick”事件,以及如何做到这一点? (没曾想办法)

我的解决办法:

<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

你的'Check'动作方法是怎样的? – Shyju

+0

[如何将参数从@ Url.Action传递给asp.net mvc3中的控制器函数](https://stackoverflow.com/questions/13017513/how-to-pass-parameter-from-url-action- to-controller-function-in-asp-net-mvc3) – Munzer

回答

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 
} 

可是......

如果您没有更改视图中的任何值,则不需要发送整个表单。只需发送实体(主键)和HttpPost操作方法的唯一Id值,使用该唯一Id,获取完整的实体(查询数据库)并使用它。请记住,你永远不要相信来自客户端(浏览器)的价值。为此,您可以使用您的解决方案,因为您只发送2个值,所以不需要表格。

+0

非常感谢:)你明确告诉我吧! –

相关问题