Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC-5控制器中的绑定模型_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NET MVC-5控制器中的绑定模型

C# ASP.NET MVC-5控制器中的绑定模型,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我开始学习ASP.NETMVC。我对MVC控制器中的模型类型有问题。 这是我的控制器: public async Task<IActionResult> DeleteAd(Guid id) { AdDTO ad = await _userAdService.GetAdDTOAsync(UserId,id); return View(ad); } [HttpDelete] public async Task&

我开始学习ASP.NETMVC。我对MVC控制器中的模型类型有问题。 这是我的控制器:

    public async Task<IActionResult> DeleteAd(Guid id)
    {
        AdDTO ad =  await _userAdService.GetAdDTOAsync(UserId,id);
        return View(ad); 
    }

    [HttpDelete]
    public async Task<IActionResult> DeleteAd(RemoveUserAd command)
    {
        await DispatcheAsync<RemoveUserAd>(command);
        return RedirectToAction("AllAds","UserAd");
    }
类“AdDTO”具有属性“Id”,但“RemoveUserAd”类具有名为“AdID”的属性

如何使用mvc视图将AdDTO.Id传递给RemoveUserAd.AdId?在本节中,可以通过任何方式绑定视图中的模型/属性:

 <form asp-action="DeleteAd"> 
    <input type="hidden" asp-for="Id"  />
    <input type="submit" value="DeleteAd" class="btn btn-default" /> |
    <a asp-action="Index">Back to List</a>
</form>
查看代码:

@模型AdPortal.Infrastructure.DTO.AdDTO @{ ViewData[标题]=删除; } 细节 公元 @Html.DisplayNameFormodel=>model.Name @Html.DisplayFormodel=>model.Name @Html.DisplayNameFormodel=>model.Content @Html.DisplayFormodel=>model.Content @Html.DisplayNameFormodel=>model.AddDate @Html.DisplayFormodel=>model.AddDate @Html.DisplayNameFormodel=>model.ExpiryDate @Html.DisplayFormodel=>model.ExpiryDate | 返回列表 如果AdDTO应该是视图模型,那么在[HttpDelete]操作中,您不采用RemoveUserAd模型。相反,您将AdDTO模型带回去

然后,在分派命令之前,您可以从视图模型AdDTO手动或使用AutoMapper构造命令


我一定错过了什么,但你不是已经在传递身份证了吗?DeleteAdGuid id中的id不属于要删除的广告吗?请发布这两个模型、返回删除表单的控制器以及包含表单的视图的其余部分。我正在将AdDTO模型传递给DeleteAd视图。我将编辑帖子以粘贴代码。这不是必需的。模型绑定器不关心将哪个模型下推到视图中。只要属性存在并且命名正确,模型绑定器就会将它们绑定到您想要的任何模型。如果为True,则意味着RemoveUserAd必须从AdDTO继承,或者在AdDTO类中定义了某些相同的属性。但从问题来看,情况并非如此,至少RemoveUserAd听起来不像是从AdDTO继承的,它不必继承任何东西。只要它具有相同的属性。这是有利的,因为该模型实际上只能表示您实际需要的值,这是一个很大的好处,可以防止。我理解,但在这个问题中,@michals试图绑定的属性在这两个模型之间是不同的:AdDto.Id vs RemoveUserAd.AdId。我理解什么是重叠,但在这个问题上,我认为这无关紧要,因为命令是手动生成的。他没有将AdDTO模型直接带入下一个流程。同样,我提供的解决方案就是针对这个问题。我自己不会这样构建它。不用担心,我担心其他用户会读到这样的语句:如果AdDTO应该是视图模型,那么在[HttpDelete]操作中,您不会采用RemoveUserAd模型。相反,您将AdDTO模型带回去。他们假设情况总是这样,不需要再三考虑:您的解决方案是完全有效的,我认为更改属性名称是更好的解决方案。
[HttpDelete]
public async Task<IActionResult> DeleteAd(AdDTO model)
{
    var command = new RemoveUserAd
    {
        AdId = model.Id,
        ....
    };

    await DispatcheAsync<RemoveUserAd>(command);
    return RedirectToAction("AllAds","UserAd");
}
[HttpDelete]
public async Task<IActionResult> DeleteAd(Guid id)
{
    var command = new RemoveUserAd
    {
        AdId = id,
        ....
    };

    await DispatcheAsync<RemoveUserAd>(command);
    return RedirectToAction("AllAds","UserAd");
}