首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC-5控制器中的绑定模型

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

Stack Overflow用户
提问于 2017-10-13 16:38:10
回答 1查看 724关注 0票数 0

我是ASP.NET MVC的初学者。我对MVC控制器中的模型类型有问题。这是我的控制器:

代码语言:javascript
复制
    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?本节中查看的任何绑定模型/属性的方法:

代码语言:javascript
复制
 <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>

查看代码:

代码语言:javascript
复制
@model AdPortal.Infrastructure.DTO.AdDTO

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

<h2>Details</h2>

<div>
    <h4>Ad</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Name)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Name)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Content)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Content)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.AddDate)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.AddDate)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.ExpiryDate)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.ExpiryDate)
        </dd>
    </dl>
</div>
<div>
  <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>
</div>

AdDTO模型

代码语言:javascript
复制
public class AdDTO
{
    public Guid Id{get; set;}
    public string Name {get;set;}
    public string Content {get;set;}
    public DateTime AddDate {get; set;}
    public DateTime ExpiryDate {get; set;} 
    public string UserId {get; set;}
    public Guid UserName {get;set;}
}

RemoveUserAd命令模型

代码语言:javascript
复制
public class RemoveUserAd
{
    public Guid AdId {get; set;}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-13 17:01:52

如果AdDTO应该是视图模型,那么在您的[HttpDelete]操作中,不使用RemoveUserAd模型。相反,您可以使用AdDTO模型。

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

代码语言:javascript
复制
[HttpDelete]
public async Task<IActionResult> DeleteAd(AdDTO model)
{
    var command = new RemoveUserAd
    {
        AdId = model.Id,
        ....
    };

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

旁注

在您的表单上,不需要指定method="delete"

在你的Controller上,你不需要[ValidateAntiForgeryToken]吗?或者让它启用全局config.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());

来自评论的反馈

如果您担心OverPosting,那么在操作中只需使用Id而不是整个AdDTO模型。

代码语言:javascript
复制
[HttpDelete]
public async Task<IActionResult> DeleteAd(Guid id)
{
    var command = new RemoveUserAd
    {
        AdId = id,
        ....
    };

    await DispatcheAsync<RemoveUserAd>(command);
    return RedirectToAction("AllAds","UserAd");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46734406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档