如何在视图之间传递数据

时间:2012-09-04 06:13:21

标签: c# asp.net-mvc-3 razor

我有我的控制器传递数据来查看如下:

IEnumerable<MovieDetails> jsonData = default(IEnumerable<MovieDetails>);

#region Constructor Request to get all Data
public MoviesController()
{
    jsonData = GetJsonValues(URL);
}
public ActionResult Index()
{
    return View(jsonData);
}

现在我的视图将控件呈现为:

@model IEnumerable<VikiMVC.Models.MovieDetails>

@foreach (var movieDetails in Model)
{
    <!--Deleted Divs for Simplicity -->
    <img src = @movieDetails.Thumbnail alt = @movieDetails.Thumbnail 
          class="imgStyle"onclick="playMovie(this)" alt=@movieDetails.MovieURI/>     
}

现在点击Image我想打开另一个视图并访问与该特定项目相关的@movieDetails。

我的电影详情课程如下:

public class MovieDetails
{
   public string Title { get; set; }
   public string Thumbnail { get; set; }
   // public string URI { get; set; }
   public string Description { get; set; }
   public string MovieURI { get; set; }
   // public List<Response> Response { get; set; }
}

因此,当我点击图像时,我应该能够访问特定于该特定图像的MovieURI。我们可以使用querystring来做到这一点,但Razor必须有更好的东西。

3 个答案:

答案 0 :(得分:2)

为什么你的图像上有两次alt?试试这个:

@foreach (var movieDetails in Model)
{
    <!--Deleted Divs for Simplicity -->
    <img src = @movieDetails.Thumbnail class="imgStyle" onclick="playMovie('@movieDetails.MovieURI')" alt=@movieDetails.MovieURI/>     
}

在js:

function playMovie(uri){
    window.location.href = uri;
}

但我会建议这样的事情(在模型中添加Id字段):

@foreach (var movieDetails in Model)
{
    <!--Deleted Divs for Simplicity -->
    <a href="/Mycontroller/Movie/@movieDetails.Id">
        <img src = @movieDetails.Thumbnail class="imgStyle" alt=@movieDetails.MovieURI/>   
    </a>  
}

动作:

public ActionResult Movie(int id)
{
    var movieModel = context.Movies.GetById(id);
    return View(movieModel);
}

答案 1 :(得分:1)

通过QueryString有什么问题?

我要通过MovieURI传递MovieDetailsQueryString ID,然后将其传递到您要显示的视图中。

Razr是一个View引擎。它不会更改您在视图之间传递数据的方式。我会避免使用像其他人建议的TempData,除非我绝对不能以其他方式做到这一点。

答案 2 :(得分:0)

您可以使用TempData在不同的视图之间传递数据。 看看this link