2012-08-16 161 views
0

不知道我是否遵循MVC约定,但是我有一些变量从一个控制器A传递到控制器B.我的目标是在ActionLink上有另一个名为'Publish'的视图来处理点击它。MVC在控制器内传递变量

从控制器A重定向:

var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Publish", new { accTok = facebookAccessTok, fullImgPath = fullpath }); 
      return Json(new { Url = redirectUrl }); 

我现在值“accTok”,在我的“发布”指数控制器B包含一个ActionLink的在它看来做加工“fullImgPath” ,但我不知道我怎么把它们传递给我的“发布”的ViewResult”的方法来做到这一点:

namespace SF.Controllers 
{ 
    public class PublishController : Controller 
    { 

    public ViewResult Index(string accTok, string fullImgPath) 
     { 
      return View(); 
     } 

     // This ViewResult requires the values 'accTok' and 'fullImgPath' 
     public ViewResult Publish() 
     { 
      // I need the values 'accTok' and 'fullImgPath' 
      SomeProcessing(); 
      return View(); 
     } 

     public SomeProcessing(string accessToken, string fullImagePath) 
     { 
      //Implementation 
     } 
    } 
} 

索引视图:

@{ 
     ViewBag.Title = "Index"; 
    } 

    <h2>Publish</h2> 

    <br/><br/> 

    @Html.ActionLink("Save Image", "Publish") 
+0

对不起,但我无法理解完整的场景。你有来自** action **'Index'的参数,并且你需要在同一个控制器上的'Publish'动作中使用它们。 – 2012-08-16 04:04:19

回答

0

我建议这样做

public ViewResult Publish(string accTok, string fullImgPath) 
     { 
      SomeProcessing(accTok,fullImgPath); 
      return View(); 
     } 
+0

谢谢,但那会立即处理和显示发布视图,这不是我想要的。我需要首先显示索引页面,并在单击ActionLink后执行SomeProcessing。 – k80sg 2012-08-16 06:08:09

+0

我想我的观点是,要访问accTok和fullImgPath变量,您需要将它们传递到Publish方法以执行您正在尝试执行的操作。 – 2012-08-17 00:30:25

0

在你的控制器:

public ViewResult Index(string accTok, string fullImgPath) 
{ 
    ViewModel.Acctok = accTok; 
    ViewModel.FullImgPath = fullImgPath; 
    return View(); 
} 

public ViewResult Publish(string accTok, string fullImgPath) 
{ 
    SomeProcessing(accTok,fullImgPath); 
    return View(); 
} 

在视图:

@Html.ActionLink("Save Image", "Publish","Publish",new {accTok=ViewModel.Acctok, fullImgPath=ViewModel.FullImgPath},null) 

代替ActionLink的,你也可以把它带隐藏输入的表单字段(如果此方法更改数据库中/磁盘上的内容,实际上应该在后)。

但无论如何,请使用视图模型将参数从索引操作传递到视图,以便可以将它们发送到发布操作。这通常是在MVC中使用无状态网络的方式。