gpt4 book ai didi

c# - 表中的数据未出现在 ASP.NET 页面上

转载 作者:太空宇宙 更新时间:2023-11-04 15:45:45 24 4
gpt4 key购买 nike

很简单,当我的 ASP.NET MVC 页面被编译成 HTML 时,我在服务器上的表格中有数据,但这些数据不会出现。

我知道后端一切正常,因为在其他 View 上没有问题,但出于某种原因在这个页面上它不起作用。

我怀疑这与我的模型中有两个类有关,因为这是唯一这样做的页面,但我不太确定,因为我是 MVC 的新手。

这是模型,我将其称为 ModelFile.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Project.Subgroup.Models
{
public class ClassIActuallyNeed
{
public int Id { get; set; }
public string Html { get; set; } //<---This is the data I want
public string Version { get; set; }
public bool Deleted { get; set; }


}

public class ClassMyFriendInsistsINeed
{
public int Id { get; set; }
public string Name { get; set; }
public byte[] Signature { get; set; }
public bool Deleted { get; set; }

public virtual ClassIActuallyNeed ClassIActuallyNeed { get; set; }
}
}

...以及名为 MainController.cs 的 Controller :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Project.Models;
using Project.Subgroup.Models;
using System.Data.Entity;
using Project.Models.Authentication;

namespace Project.Subgroup.Controllers
{
public class MainController : Controller
{
private MyDatabase context = new MyDatabase();

// GET: Lobby/Home
public ActionResult Index()
{
return View();
}

[HttpGet]
public ActionResult FormPage()
{
return View();
}

[HttpPost]
public ActionResult FormPage(ClassIActuallyNeed model)
{

if (ModelState.IsValid)
{
using (var context = new MyDatabase())
{
var modelfile = new ModelFile
{
Name = model.Name,
Signature = model.Signature,
ClassIActuallyNeedId = model.ClassIActuallyNeedId
};
}
}
return View(model);
}
}
}

...最后是 View ,即 FormPage.cshtml:

@model Project.Models.ClassIActuallyNeed

@{
ViewBag.Title = "My Page";
Layout = "~/Subgroup/Views/Shared/_Layout.cshtml";
}

<h2 >@ViewBag.Title</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

@Html.DisplayFor(model => model.Html) //<---- the problem

//There is other form stuff in here
}

“Html”数据实际上只是一个包含 HTML 的字符串,我希望将其放入我的网页中。这是该表中唯一的一行,当我使用“DisplayNameFor”而不是“DisplayFor”时,它成功地将名称“Html”放在我的页面上。

对于代码呕吐,我深表歉意,我删除了所有我知道不相关的内容,但我无法真正确定我的问题出在哪里。 visual studio 或控制台中没有任何类型的错误。页面上的其他所有内容都工作正常,包括我的 JS 内容。

编辑:我感谢到目前为止的所有输入。我知道问题不在于我没有填充模型,因为它是由远程数据库填充的。这适用于所有其他页面。正如我怀疑的那样,RequestVerificationToken 肯定应该存在,并且是不相关的。

还要澄清一下:问题不在于它显示的是未格式化的文本而不是 HTML。问题是它根本不显示任何内容。

最佳答案

我目前可以看到您有 2 个问题:

  • 您没有使用任何数据填充您的模型

    [HttpGet]
    public ActionResult FormPage()
    {
    //you need to pass the view some data, otherwise your model in your view
    //will be null and you wont get any output (which is what you're seeing now)

    ClassIActuallyNeed model = null;

    //hardcoded:
    //model = new ClassIActuallyNeed
    //{
    // Id = 1,
    // Html = "<h1>Hello</h1>",
    // Version = "something,
    // Deleted = false
    //};

    //an example of using your context to fetch your model
    using(var context = new MyDatabase())
    {
    var id = 1
    model = context.ClassIActuallyNeeds.Single(x => x.Id == id);
    }

    return View(model);
    }
  • 您没有将 html 字符串呈现为 html

    Html.DisplayFor(model => model.Html)会将此属性呈现为页面上的纯文本,而不是看到 Hello格式为 <h1>标签,你会看到 <h1>Hello</h1>作为页面上的纯文本。该框架这样做是为了防止注入(inject)攻击,我建议您稍微阅读一下,但就本文而言,这超出了范围。要实际呈现 html 字符串,请使用 Html.Raw(model => model.Html)

作为附加说明, <input name="__RequestVerificationToken" type="hidden" value="[a bunch of junk characters here]">你看到的是你使用 @Html.AntiForgeryToken() 的结果.防伪 token 用于防止 CSRF 攻击,我还建议您继续阅读(安全很重要!)。由于此 View 中没有任何可编辑数据(这是我根据您使用 DisplayFor 做出的假设),因此我认为您的 View 或 AntiForgeryToken 中没有表单 ( Html.BeginForm)。如果此数据是可编辑的并且可以回发到服务器,则忽略它并且这两个部分可能都需要保留在原位。

通过上面的 Controller 操作,您的 View 可以像下面这样简单地显示您的数据:

@model Project.Models.ClassIActuallyNeed

@{
ViewBag.Title = "My Page";
Layout = "~/Subgroup/Views/Shared/_Layout.cshtml";
}

<h2 >@ViewBag.Title</h2>

@Html.Raw(model => model.Html)

如果此数据需要可编辑,那么它看起来更像

@model Project.Models.ClassIActuallyNeed

@{
ViewBag.Title = "My Page";
Layout = "~/Subgroup/Views/Shared/_Layout.cshtml";
}

<h2 >@ViewBag.Title</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.Version)
@Html.HiddenFor(model => model.Deleted)
@Html.EditorFor(model => model.Html)

<input type="submit" value="Submit">
}

关于c# - 表中的数据未出现在 ASP.NET 页面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56297804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com