ASP.NET Core向控制器的Create方法添加参数

时间:2017-05-24 14:26:42

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

我的控制器的Create方法绑定到TestCase对象:

public async Task<IActionResult> Create([Bind("Name, Description")] TestCase testCase)

并且执行模型绑定的View将使用ViewModel,其指定如下:

 public class CreateTestCaseViewModel
    {
        public string ProjectName { get; set; }

        public TestCase TestCase { get; set; }
    }

我的视图代码(只是您输入名称和描述,然后提交的表单)是:

@model CreateTestCaseViewModel

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

<h2>Create Test Case</h2>

<form asp-action="Create">
    <div class="form-horizontal">
        <hr />
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="TestCase.Name" class="col-md-2 control-label">
</label>
            <div class="col-md-10">
                <input asp-for="TestCase.Name" class="form-control" />
                <span asp-validation-for="TestCase.Name" class="text-danger"></span>
        </div>
    </div>

    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="TestCase.Description" class="col-md-2 control-label"></label>
        <div class="col-md-8">
            @*<input asp-for="Description" class="form-control" />*@
            <input asp-for="TestCase.Description" textarea class="form-control" id="Description" rows="5"/>

            <span asp-validation-for="TestCase.Description" class="text-danger"></span>
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default"/>
        </div>
    </div>
</div>

<div>
        <a asp-action="Details">Back to List</a>
    </div>

    @section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

我的目标是让我的方法能够将ProjectName作为参数:

public async Task<IActionResult> Create([Bind("Name, Description")] TestCase testCase, string projectName)

如何从View中添加它?

2 个答案:

答案 0 :(得分:0)

最简单的方法是在控制器中使用与View中相同的模型。

public async Task<IActionResult> Create(CreateTestCaseViewModel model)

然后在View中,如果需要ProjectName @Model.EditorFor(Model.ProjectName)的输入,如果只需要Model中的存储值,则可以创建@Model.HiddenFor(Model.ProjectName)更新您可以将其放在元素<div class="form-horizontal">之后 实际上无论在哪里,这个元素都会被用户隐藏。它应该在<form asp-action="Create">元素

中的唯一要求

答案 1 :(得分:0)

更改您的控制器操作以接受您的视图模型并将新参数添加到绑定列表(或完全删除将接受所有字段的Bind属性):

public async Task<IActionResult> Create([Bind("Name, Description, ProjectName")] CreateTestCaseViewModel createTestCaseViewModel)

然后将ProjectName的输入添加到视图中:

<input asp-for="ProjectName" type="text" />