【问题标题】:How to display list of objects in a View for an MVC project如何在 MVC 项目的视图中显示对象列表
【发布时间】:2021-08-04 20:54:02
【问题描述】:

我有一个返回字符串对象列表的方法。我想在视图中将这些对象列表显示为复选框。

        [HttpGet]
        [Route("AvailablePlans")]
        public ActionResult GetPlan()
        {
                List<Plans> plans = new();

        plans.Add(new Plans { PlanId = 1, PlanName = "Internet" });
        plans.Add(new Plans { PlanId = 2, PlanName = "TV & Streaming" });
        plans.Add(new Plans { PlanId = 3, PlanName = "Mobile" });
        plans.Add(new Plans { PlanId = 4, PlanName = "Home Security" });
        plans.Add(new Plans { PlanId = 5, PlanName = "Home Phone" });


            var plansAvailable = JsonSerializer.Serialize(plans);
            _logger.Log(LogLevel.Information, "Response-Body: {@Response-Body}", plansAvailable);


            return Ok(plans);
        }

我在视图内部尝试了以下操作,但 plans 每次调用时计数始终为 0。有没有特定的方法可以将对象列表显示为复选框?

@model PhoneNumberInput


<h2>Second page</h2>

@using (Html.BeginForm())
{
 
    <input type="checkbox" id="@PlanService.API.Controllers.PlansController.plans[0]" name="PlanService.API.Controllers.PlanControllers.plans[1]" />
    <label for="PlanService.API.Controllers.PlanControllers.plans[1]"> @PlanService.API.Controllers.PlansController.plans[1] </label> <br />

    @Html.TextBoxFor(r => r.PhoneNumber)
    <input id="Button" type="submit" value="Next" />

    <p>  @Html.ValidationMessageFor(r => r.PhoneNumber) </p>

}

更新:

我目前有以下情况:

namespace Plan.API.Models
{
    public class ViewPhoneNumberInput
    {
        [Required(ErrorMessage = "You did not enter your phone number! Please enter your phone number!")]
        public String PhoneNumber { get; set; }
        public List<Plans> plans { get; set; }
    }
}

控制器:

namespace Plan.Api.Controllers
{

     public static List<Plans> plans = new();

     [HttpGet]
        [Route("AvailablePlans")]
        public ActionResult GetPlan()
        {

            var model = new ViewPhoneNumberInput();
            model.plans = new List<Plans>();

            model.plans.Add(new Plans { PlanId = 1, PlanName = "Internet" });
            model.plans.Add(new Plans { PlanId = 2, PlanName = "TV & Streaming" });
            model.plans.Add(new Plans { PlanId = 3, PlanName = "Mobile" });
            model.plans.Add(new Plans { PlanId = 4, PlanName = "Home Security" });
            model.plans.Add(new Plans { PlanId = 5, PlanName = "Home Phone" });


            var plansAvailable = JsonSerializer.Serialize(model.plans);
            _logger.Log(LogLevel.Information, "Response-Body: {@Response-Body}", plansAvailable);


            return Ok(model.plans);
        }


}

【问题讨论】:

    标签: c# .net asp.net-mvc list


    【解决方案1】:

    复选框通常接受 bool 值,我认为您的代码是 asp 核心。

    但是我会在asp mvc中解释这个过程。

    添加 ViewModelPhoneNumberInput 类

    public class ViewModelPhoneNumberInput
    {
       public PhoneNumberInput phoneNumberInput   {get; set; }
       public List<Plans> plans {get; set; }
    }
    

    将操作更改为:

    [HttpGet]
    [Route("AvailablePlans")]
    public ActionResult GetPlan()
    {
        var model = new ViewModelPhoneNumberInput();
        model.plans = new List<Plans>();
    
        plans.Add(new Plans { PlanId = 1, PlanName = "Internet" });
        plans.Add(new Plans { PlanId = 2, PlanName = "TV & Streaming" });
        plans.Add(new Plans { PlanId = 3, PlanName = "Mobile" });
        plans.Add(new Plans { PlanId = 4, PlanName = "Home Security" });
        plans.Add(new Plans { PlanId = 5, PlanName = "Home Phone" });
        var plansAvailable = JsonSerializer.Serialize(plans);
        _logger.Log(LogLevel.Information, "Response-Body: {@Response-Body}", plansAvailable);
    
        return View(model);
    }
    

    将视图更改为:

    @model yournamespace.ViewModelPhoneNumberInput
    @using (Html.BeginForm())
    {
        for(int i= 0;i < Model.plans.Count; i++)
        {
           <input type="checkbox" id="@Model.plans[i].PlanId" name="Model.plans[i].PlanId" />
           <label for="Model.plans[i].PlanId"> @Model.plans[i].PlanName </label> <br />
        }
        
    
        @Html.TextBoxFor(r => r.phoneNumberInput.PhoneNumber)
        <input id="Button" type="submit" value="Next" />
        <p>  @Html.ValidationMessageFor(r => r.phoneNumberInput.PhoneNumber) </p>
    }
    

    【讨论】:

    • 谢谢!!我明白了,所以如果我的操作控制器在 asp.net 核心 web api 项目中并且视图在 MVC 项目中,我需要右键单击我的 web api 项目并为包含 ViewPhoneNumberInput 模型类的 mvc 项目添加引用为了在动作控制器中调用它,对吗?如果是这样,我尝试了它,但在 model.plans 行上,plans 下方有一条红线,表示“找不到类型或命名空间名称 Plans(您是否缺少 using 指令或程序集引用?)跨度>
    • 我的回答有些错误,我更正了。如果您使用 asp mvc,则不需要任何参考
    • 你必须告诉控制器你添加模型的命名空间。用键(ctrl +.)可以添加程序集引用。
    • 谢谢!在我的 for 循环中,它说运算符''类型的操作数。当你i &lt; Model.plans 时,你得到同样的结果吗?
    • 我忘记了。是的,使用 Model.plans.Count 是正确的
    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多