【问题标题】:ActionResult not correctly getting parameterActionResult 未正确获取参数
【发布时间】:2021-02-08 13:32:36
【问题描述】:

在我的主页/索引视图中,我有一个列表视图,其中显示卡片,其中包含所有上传的照片和详细信息,每个卡片都包含每张卡片的点击操作链接:

@model IEnumerable<FunPetPics.Models.PetPhotoModel>

@{
    ViewData["Title"] = "Home Page";
}

@if (Model == null || !Model.Any())
{
    <p>uploads will be displayed here</p>

}
else
{

    @using (Html.BeginForm("Index", "Home", FormMethod.Get))
    {
        @await Html.PartialAsync("_PetPhotoModelFilter")
    }

    <div class="card-columns">

        @foreach (var upload in Model)
        {
         

   <a href='@Url.Action( "Rate", "Details", upload.Id )'>

                <div class="card">
                    <img class="card-img-top" src="@("~/UploadedPhotos/"+  upload.ImageName)" asp-append-version="true">
                    <div class="card-body">
                        <h4 class="card-title">@upload.Title</h4>
                        <h6 class="card-subtitle mb-2 text-muted">@upload.PetName</h6>
                        <p class="card-text">@upload.DateUploaded</p>
                        <p class="card-text">@upload.Description</p>
                        <p class="card-subtitle">Ratings:</p>
                        <p class="card-text">
                            Cute:@upload.AverageCutenessRating/5<br />
                            Funny:@upload.AverageFunnynessRating/5<br />
                            Awsome:@upload.AverageAwsomnessRating/5<br />
                        </p>
                    </div>
                </div>
            </a>
        }
    </div>

详细信息控制器:

using FunPetPics.Data;
using Microsoft.AspNetCore.Mvc;
using System.Linq;

namespace FunPetPics.Controllers
{
    public class DetailsController : ControllerBase
    {
        public DetailsController(FunPetPicsContext context) : base(context)
        {
        }

        [HttpGet]
        //[Route("Details/Rate/{id}")] when I add this the controller doesn't work and I get page not found
        public IActionResult Rate(int id)
        {
            var model = _context.PetPhotos.FirstOrDefault(p => p.Id == id);

            return View(model);
        }
    }
}

目前,Details/Rate 视图仅显示照片,直到我可以让其余部分正常工作:

@using Microsoft.AspNetCore.Http;

@model PetPhotoModel


@{
    <img src="@("~/UploadedPhotos/"+  ((PetPhotoModel)Model).ImageName)" asp-append-version="true">
}

当浏览器上显示的主页/索引页面上显示的链接时,它会将我带到https://localhost:44316/Rate/Details(为什么没有id?)并且控制器中的id 为0(不是正确的)。

我也尝试将此属性添加到控制器的 Rate() 方法中:[Route("Details/Rate/{id}")] 但在控制器中没有遇到断点,它显示的页面未找到具有相同 URL。

【问题讨论】:

    标签: c# .net model-view-controller


    【解决方案1】:

    您没有正确使用Url.Action。保留 Route 属性,并更改视图以使用它,注意它如何使用匿名对象来允许 MVC 将 id 值链接到匹配参数:

    @Url.Action( "Rate", "Details", new { id = upload.Id })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2014-10-22
      相关资源
      最近更新 更多