【问题标题】:Asp.net core 2.1 - Two argument HttpPost from formAsp.net core 2.1 - 来自表单的两个参数 HttpPost
【发布时间】:2019-05-21 17:16:27
【问题描述】:

是否可以将两个参数传递给一个 [httpPost] 控制器方法? 我想传递一个模型和一个文件。 要传递我使用的模型:

CS    
public async Task<IActionResult> Create([Bind("prop1,prop2,prop3")] SomeModel model)

HTMLCS
<form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="prop1" class="control-label"></label>
            <select asp-for="prop1" class ="form-control" asp-items="ViewBag.prop1"></select>
        </div>
        <div class="form-group">
             <label asp-for="prop2" class="control-label"></label>
            <input asp-for="prop2" class="form-control" />
            <span asp-validation-for="prop3" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="prop3" class="control-label"></label>
            <input asp-for="prop3" class="form-control" />
            <span asp-validation-for="prop3" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>

而且效果很好。 但我也想发布一个文件。 所以我创建了一个输入

<label asp-for="FileName" class="control-label"></label>
<input type="file" asp-for="FileName" name="FileName"/>

并修改了我在控制器中的方法

public async Task<IActionResult> Create([Bind("prop1,prop2,prop3")] SomeModel model, IFormFile FileName)

但它说 SomeModel 不包含“文件名”的定义:(

编辑: 编码为https://docs.microsoft.com/pl-pl/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.2

如果您的控制器使用 IFormFile 接受上传的文件,但您 发现值始终为null,确认你的HTML表单是 指定 multipart/form-data 的 enctype 值。如果这个属性 未在元素上设置,文件上传不会发生,并且任何 绑定的 IFormFile 参数将为空。

【问题讨论】:

  • 你的模型类在哪里?
  • 只是一个具有随机 3 个属性的简单模型

标签: forms asp.net-core model upload asp.net-core-mvc


【解决方案1】:

问题出在以下几行:

<label asp-for="FileName" class="control-label"></label>
<input type="file" asp-for="FileName" name="FileName"/>

您正在对文件使用强类型 labelinput 控件,但您的模型类不包含任何名为 FileName 的属性。

FileName 编写labelinput 控件,如下所示:

<label for="FileName" class="control-label">FileName</label>
<input type="file" name="FileName"/>

那么你的form 必须包含enctype="multipart/form-data" 属性如下:

<form asp-action="Create" method="post" enctype="multipart/form-data">
    // Here is your input fields
</form>

现在一切正常,您的 IFormFile FileName 参数将在帖子中包含所选文件。

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2020-04-12
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多