2017-05-24 71 views
0

我控制器的創建方法結合到一個TestCase對象:ASP.NET核心添加參數控制器的創建方法

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

並做模型綁定需要一個視圖模型中,它是像這樣指定的視圖:

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");} 
} 

我的目標是我的方法,以便能夠把項目名作爲參數,以及:

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

我怎樣才能從視圖中添加呢?

回答

0

更改您的控制器動作來接受您的視圖模型,並添加到綁定列表中的新參數中(或刪除綁定屬性完全將接受所有字段):

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

那麼對於項目名添加一個輸入視圖:

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

我不想爲項目名添加新的輸入,它已經在那裏,我只是想不使用會話存儲它。我也試過了,無法綁定到視圖模型的屬性......我必須重命名它們嗎? –

+0

然後,使用類似於其他答案所暗示的隱藏字段。目前爲止的答案都是很好的解決方案 – ssmith

+0

如果遇到問題,請從創建操作中刪除'[Bind(「」)],直到您將其排除。您也可以嘗試使用'@ Html.EditorFor(Model.TestCase.Name)'而不是'asp-for'標籤助手來確保您的目標是正確的屬性名稱。 –

0

最簡單的方法是在控制器中使用與View中相同的模型。

public async Task<IActionResult> Create(CreateTestCaseViewModel model) 

然後在視圖中,您可以創建@Model.EditorFor(Model.ProjectName),如果你需要項目名@Model.HiddenFor(Model.ProjectName)的輸入,如果你需要從模型只是存儲的值。 更新你可以把它放在元素的後面<div class="form-horizontal"> 其實這不重要在哪裏,這個元素對用戶是隱藏的。唯一的要求應該是你<form asp-action="Create">元素

+1

我不需要爲這個輸入,這是一個值我已經有了,所以我應該使用@ Model.HiddenFor(Model.ProjectName)但在HTML結構應該放在哪裏?而且我將如何將表單中的數據綁定到該視圖模型? –

+0

@JDoe它會自動解析表單內的所有綁定。所以如果你將添加隱藏的輸入,它的值將被傳遞給控制器​​ –

+0

當我在視圖中綁定視圖模型後,我的視圖中的TestCase對象實際上爲null(項目名稱可以)。問題是什麼? –

相關問題