【问题标题】:Passing ID from View to Controller in MVC 5在 MVC 5 中将 ID 从视图传递到控制器
【发布时间】:2016-08-28 13:46:27
【问题描述】:

可能是一个重复的问题和一个很长的问题。但我没有得到我的解决方案,而且问题很容易专家。

在我的HomeController 中有三个 ActionResult(),分别命名为 Index()Customer()Item()

模型类:

namespace Customer.Models
{
    public class CustomerInfo
    {
        public int CustomerId { get; set; }
        public string CustomerName { get; set; }
        public string ItemName { get; set; }
    }
}

我说的是我的Customer()。在Customer() 中,列表将返回到CustomerView 页面。

家庭控制器:

List<CustomerInfo> customers = new List<CustomerInfo>();
public ActionResult Customer()
 {
       customers.Add(new CustomerInfo { CustomerName= "Nafeeur"});
       customers.Add(new CustomerInfo { CustomerName = "Rasel" });
       customers.Add(new CustomerInfo { CustomerName = "Fagun" });
       return View(customers);
 }

CustomerView页面:

@model IEnumerable<Customer.Models.CustomerInfo>
@using Customer.Models;

@{
    ViewBag.Title = "Customers";
}
<h2>@ViewBag.Title.</h2>

<h1>Customer Name</h1>

<ul>
    @foreach(CustomerInfo customer in @Model)
    {
        <li>
            @Html.ActionLink(customer.CustomerName, "Index", "Customer", new {id = customer.CustomerId})
        </li>
    }
</ul>

从这个视图页面,我将 id 传递给另一个名为 CustomerController 的控制器页面

代码:

namespace Customer.Controllers
{
    public class CustomerController : Controller
    {
        // GET: Customer
        public ActionResult Index(int id)
        {
            var list = new List<CustomerInfo>();
            var item = list.Find(x => x.GetId(id));
            return View(item);
        }
    }
}

查看CustomerController的页面查看:

@model Customer.Models.CustomerInfo

@{
    ViewBag.Title = "Customer Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Customer Index</h2>


<h3>@Model.CustomerId</h3>
<h3>@Model.CustomerName</h3>
<h3>@Model.ItemName</h3>

我的问题是,当我点击任何客户时,它都不起作用。

错误:

【问题讨论】:

  • 你的问题是......?
  • 您没有为CustomerId 设置任何值 - 它们都将是0int 的默认值),因此Index() 方法中id 的值将是@987654343 @
  • 在该方法中,您只需生成一个不包含任何项目的新列表,因此将没有要返回的项目
  • “我的问题是,当我点击任何客户时,它都无法正常工作。” 并不是一个真正的问题......什么不起作用?您尝试过什么来解决此问题?你有错误吗?人们来这里是为了帮助,当然——但在某些情况下,我们不想复制/粘贴你的整个代码来编译它并自己调试它。您需要事先进行一些调试,并尝试描述您遇到的确切问题(如果可能)。
  • 您应该有一个数据库上下文实例来检索客户详细信息。然后使用 DbSet Find 获取客户详细信息。

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


【解决方案1】:

在我看来(至少是您收到错误的原因)是您只需要在 CustomerInfo 类中实现 GetId() 。除非我完全离开(我可能会),否则这不是某种你可以使用的隐式方法。你必须写它。例如,像这样的 something 可以进入您的 CustomerInfo 类。

public int GetId()
{
   return this.CustomerId;
}

但是,正如斯蒂芬在评论中指出的那样,您仍然必须为客户实际设置 id。如果您没有使用数据库(因为看起来您不是来自您的评论)并且您只是在创建某种演示应用程序,那么您只需在代码中编写某种方法来为每个设置 id您列表中的那些客户(即 Nafeer、Rasel、Fagun)。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2016-06-08
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多