使用字符串作为ID的“测试详细信息”操作

时间:2019-07-22 19:32:53

标签: c# asp.net-core .net-core

the Index[the blank detail page] 1页我正在尝试使用moq为具有字符串类型作为Key的detail方法编写测试。我创建了一个接口和存储库,该接口和存储库具有通过测试的方法GetOne(string id)。我的问题是,当我运行该应用程序并导航到详细信息链接时,页面显示为空白。

我到处都有搜索,但是找不到任何解决方案。

// The Repo
public class PostcodesRepository : IPostcodesRepository
{
    private readonly sample6Context _context;

    public PostcodesRepository(sample6Context context)
    {
        _context = context;
    }

    public Task<List<Postcode>> GetAll() =>
        _context.Postcode.Include(p => p.DataZoneNavigation).AsNoTracking().OrderByDescending(a => a.Postcode1).ToListAsync();

    public Task<Postcode> GetOne(string id) =>
        _context.Postcode.Include(p => p.DataZoneNavigation).AsNoTracking().FirstOrDefaultAsync(m => m.Postcode1 == id);        
    }
}
// Model
public  class Postcode
{
    [key]
    public string Postcode1 { get; set; }
    public string DataZone { get; set; }

    public virtual Data DataZoneNavigation { get; set; }
}
// The Interface
public interface IPostcodesRepository
{
    Task<List<Postcode>> GetAll();
    Task<Postcode> GetOne(string id);
}
// The Controller
public class PostcodesController : Controller
{
    private readonly IPostcodesRepository _postcodesRepository;

    public PostcodesController(IPostcodesRepository postcodesRepository)
    {
        _postcodesRepository = postcodesRepository;
    }

    // GET: Postcodes
    public async Task<IActionResult> Index()
    {
        return View(await _postcodesRepository.GetAll());
    }

    // GET: Postcodes/Details/5
    public async Task<IActionResult> Details(string id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var postcode = await _postcodesRepository.GetOne(id);

        if (postcode == null)
        {
            return NotFound();
        }

        return View(postcode);
    }
}
// The Detail view
@model abdndata.Models.Postcode

@{
    ViewData["Title"] = "Details";
}

<h1>Details</h1>

<div>
    <h4>Postcode</h4>
    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Postcode1)
        </dt>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.DataZone)
        </dt>

    </dl>
</div>
<div>
    <a asp-action="Index">Back to List</a>
</div>
// Routing
app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });

我希望detail方法可以正常运行并显示信息。

1 个答案:

答案 0 :(得分:2)

在详细信息视图标记中,您不显示数据。您只显示显示名称。

<div>
    <h4>Postcode</h4>
    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Postcode1)
        </dt>
        <dd class="col-sm-2">
           @Model.Postcode1
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.DataZone)
        </dt>
        <dd class="col-sm-2">
            @Model.DataZone
        </dd> 
    </dl>
</div>

所以问题是模型的数据被省略了显示