【问题标题】:ASP.NET MVC comparing valuesASP.NET MVC 比较值
【发布时间】:2021-12-29 13:27:27
【问题描述】:

我正在尝试制作 AddPet 表单,它将视图(表单)中的所有数据转换到控制器中,然后在控制器中使用链接命令创建宠物(在控制器中我有我的数据库的实例)

完整代码: 控制器:

[HttpPost]
    public IActionResult AddPet(string Pname, int Page, int Pcategory, string Pimage, string PDescription)
    {
        Animal a = new Animal()
        {
            Name = Pname,
            Age = Page,
            CategoryID = Pcategory,
            PictureName = Pimage,
            Description = PDescription
        };

        _context.Animals.Add(a);
        
        return View("AddPet");
    }

查看:

    <div class="mainscreen">
        <div class="petbox">
            <div>
                <img src="https://images.ctfassets.net/hrltx12pl8hq/5vMt4yXH3WJfVGUro74UJ7/159813a78d63638d4a223a78e997f989/compressed_shutterstock_1283470036.jpg?fit=fill&w=800&h=300"/>
            </div> 
            <div class="rightside">
                    <form action="">

                        <h1>Add Net Pet</h1>
                        <h2>Pet Details</h2>
                        <p>Pet Name:</p>
                        <input placeholder="Pet Full Name" type="text" class="inputbox" name="Pname" required />
                        <p>Pet Age: </p>
                        <input placeholder="Pet Age" type="number" class="inputbox" name="Page" required />

                        <p>Pet Category</p>
                        <select class="inputbox" name="Pcategory" id="selectcategory" required>

                            <optgroup label="--Select a Pet Category--">
                                <option value="Mammls">Mammls</option>
                                <option value="Rodents">Rodents</option>
                                <option value="Fish">Fish</option>
                                <option value="Reptiles">Reptiles</option>
                            </optgroup>
                        </select>
                        <div class="picselect">
                            <p>Select Image:</p>
                            <input type="file" name="Pimage" id="file">
                        </div>
                        <p></p>
                        <p>Description Filed:</p>
                        <textarea name="PDescription" class="inputbox" id="desription" rows="4" cols="50" placeholder="Write here pet descrition"></textarea>
                        <button type="submit" class="button" asp-controller="Home" asp-action="AddPet">Add Net Pet</button>

                    </form>
               
                </div>
    </div>
</div>

模型(Animal.cs):

public class Animal
{
    [Key]
    public int AnimalID { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public int Age { get; set; }
    [Required]
    public string PictureName { get; set; }
    [Required]
    public string Description { get; set; }

    public int CategoryID { get; set; }
    public virtual Category Category { get; set;}
    public virtual ICollection<Comment> Comments { get; set; }
}

问题: 错误 405: 调试控制台:"crbug/1173575, non-JS module files deprecated."

【问题讨论】:

  • new Pet { Name = Pname, Category = Pcategory, .... }?
  • 我做不到,它不属于上下文数据库,并且没有我的动物道具(Animal.Name,Animal.Age)的实例我需要这样的东西:Animal.Name = Pname, Animal.Age = Page....
  • 您的问题是“如何从 POSTed 模型或 DTO 创建或更新实体框架实体”?

标签: asp.net asp.net-mvc


【解决方案1】:

您需要有一个类来保存属性值。例如:

public class Animal
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Category { get; set; }
    public string Image { get; set; }
    public string Discriton{ get; set; }
}

此 Animal 类必须与实体框架的实体类型对象相匹配。 然后在动作中做:

public IActionResult AddPet(string Pname, int Page, string Pcategory, string Pimage, string Pdiscriton)
{
   Animal a = new Animal(){
    Name = pname,
    Age = page,
    Category = Pcategory,
    Image = Pimage,
    Discriton = Pdiscriton
   };
   
   _context.add(a);
}

更新: 如果更改操作参数的名称,则不必创建值并将其分配给对象。您可以像这样利用默认模型绑定器:

public IActionResult AddPet(Animal a)
{
    if(a != null)
        _context.add(a);
}

在这种情况下,UI 元素的名称必须与类的属性名称相匹配。例如在 UI 和 Animal 类中都应使用 PnameName

【讨论】:

  • 我有一个具有相同属性的类模型,并且该类(模型)与我的控制器(动作)中的数据库(_context)相连
  • 我已经更新了答案。请检查。您还可以澄清“在控制器内部以使其保持我的设置”的意思吗?什么设置?
  • 它几乎工作了,我现在已经行动 - AddPet (string pname....etc) Model - Animal.cs (Animal a in controller) View - AddPet.cshtml 与表单和同名道具,但我不能 _context.SaveChanges 因为这是我的错误,因为 Description 是 NULL 但它甚至没有先将我发送到 View。没有 SaveChanges 我进入视图并可以填写表单,提交后,所有详细信息都进入 AddPet(pname..) 并且使用 [httppost] 我收到错误 405。
  • @meitaredri 405 是不允许的方法。这意味着您没有正确地将视图中的所有参数传递给操作。您需要分享您的完整代码。否则,无法猜测您作为参数传递的内容。指出问题所在是 stackoverflow 的规则。
  • 谢谢你,Rahtur,我已经编辑了线程并将我所有的代码和解释发布在那里。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2011-02-10
  • 2010-11-29
  • 2011-02-20
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2020-04-18
相关资源
最近更新 更多