将值从一个视图传递到另一个控制器中的动作
我正在使用@ html.Actionlink()构建一个链接,该链接重定向到另一个控制器中的动作(不是具有视图的原始控制器)下面是我的声明。将值从一个视图传递到另一个控制器中的动作
@Html.ActionLink(@orderNumber.ToString().Trim(), "SearchResult", "OrderStatus", @orderNumber.ToString(), new { target = "_self" })
但点击查看我得到一个异常:
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /OrderStatus/SearchResult
虽然我已经与具有名称信息搜索结果的动作名称OrderStatus控制器
我失去了一些语法?
信息搜索结果的方法:
[AcceptVerbs("POST")]
public ActionResult SearchResult(FormCollection collection)
{
try
{
string orderNumber = collection["searchItem"].ToString();
if (string.IsNullOrEmpty(orderNumber))
return View("OrderStatusSearch");
////obtain sales oder header for paased order number
#region sales order header
orderNumber = orderNumber.Trim();
ObjectParameter[] parameters = new ObjectParameter[1];
parameters[0] = new ObjectParameter("OrderNumber", orderNumber);
var headerQuery = dbContext.ExecuteFunction<Models.SalesOrderHeader>("uspGetHeaderDetails", parameters);
Models.SalesOrderHeader salesOrderHeader = new Models.SalesOrderHeader();
salesOrderHeader = headerQuery.SingleOrDefault();
////// return empty view if sales ordr header is null
if (salesOrderHeader == null)
return View("EmptySearch");
#endregion
....................
////create sales order to be passed to view
#region Create Sales Order
{
Models.SalesOrder salesOrder = new Models.SalesOrder();
salesOrder.salesOrderHeader = salesOrderHeader;
..................
return View(salesOrder);
}
#endregion
}
catch (Exception e)
{
return View("EmptySearch");
}
}
它看起来像有可能是一个或两个错误。
1)您确定使用正确的Html.ActionLink超负荷?
您正在使用期望Html.ActionLink([link text],[action],[controller],[route values],[htmlAttributes])的所有重载以及路由值是一个字符串。这需要是一个RouteValueDictionary或一个匿名对象,而不仅仅是一个字符串。试试下面,这是否如你所期望的那样工作?
@Html.ActionLink(@orderNumber.ToString().Trim(), "SearchResult", "OrderStatus", new{ id = @orderNumber.ToString() }, new { target = "_self" })
我想,你希望它来生成URL,例如/OrderStatus/SearchResult/999
,其中999是你拥有的任何订单号码。这是正确的吗?
2)您的SearchResult ActionResult只接受POST。点击由ActionLink生成的超链接将导致GET。由于您没有接受GET的这些名称的控制器/操作,404是预期的结果。
如果您ActionLink的产生点/OrderStatus/SearchResult[/order number]
的链接,然后适当的行动方法必须看起来像(假设默认路由配置):
public ActionResult SearchResult(string orderNumber) { ... }
你可以用属性[HttpGet]
前缀,如果你想要这个动作到只有允许GET,但这不是必需的。
您链接的代码是错误,请尝试以下
@Html.ActionLink("NameToBeDisplayed", "SearchResult", "OrderStatus", new { yourParameter = @OrderNumber.ToString() })
不起作用,路径路径解决不正确 – 14578446 2012-01-03 18:40:38
“SearchResult”方法的参数是什么? – hunter 2012-01-03 17:56:36
已编辑我的代码给搜索结果方法的定义 – 14578446 2012-01-03 18:33:01
@hunter:谢谢你,你的评论问题更有帮助:) – 14578446 2012-01-03 18:53:20