首先,這是我的問題的簡化版本。
我有兩個模型:
- 人
- 類別
問題是我需要兩個模型。我有一個表單,我在其中顯示選擇輸入中的類別,然后創建一個新人。
在 .cshtml 我有:
@using WebApiClient.Models
@model dynamic
<h1> Form: add a person with a category</h1>
<form asp-action="formMultiple" enctype="multipart/form-data" method="post">
<label asp-for[email protected] class="control-label">Name</label>
<input asp-for="@Model.Person.Name" class="form-control" value= "@Model.Person.Name" />
<label asp-for="Category" class="control-label">Category</label>
<select asp-for="Category">
@foreach (var item in Model.Category){
<option value="Category">@item.NameCategory</option>
}
</select>
<input type="submit" value="Add person" class="btn btn-primary" />
</form>
我在控制器中有:
public async Task<IActionResult> formMultiple()
{
dynamic d = new ExpandoObject();
var categories = await _client.GetCategoriesAsync();
d.categories = categories;
d.person = new Person();
return View(d);
}
public async Task<ActionResult> formMultiple(Person person);
任何想法如何解決這個問題?謝謝<3
uj5u.com熱心網友回復:
有幾個選擇
- 使用具有兩個屬性(一個用于人員,一個用于類別)的 ViewModel - 最佳和推薦選項
- 使用帶有兩個專案的 ValueTuple(一個用于人員,一個用于類別) - 它應該用于少量資料
- 將 Person Model 發送到視圖并在 ViewBag 或 ViewData 中有類別
- 將人員模型發送到視圖并進行 ajax 呼叫以填充類別下拉串列
所以我可以給你第二種方法的樣本
控制器
public async Task<IActionResult> formMultiple()
{
var categories = await _client.GetCategoriesAsync();
var person = new Person();
var model = (person, categories);
return View(model );
}
看法
@using WebApiClient.Models
@model (Person person, List<Category> categories)
<h1> Form: add a person with a category</h1>
<form asp-action="formMultiple" enctype="multipart/form-data" method="post">
<label asp-for=person.Name class="control-label">Name</label>
<input asp-for="person.Name" name="@nameof(Model.person.Name)" class="form-control" />
<label asp-for="person.Category" name="@nameof(Model.person.Category)" class="control-label">Category</label>
<select asp-for="person.Category">
@foreach (var item in Model.categories){
<option value="@item.IdCategory">@item.NameCategory</option>
}
</select>
<input type="submit" value="Add person" class="btn btn-primary" />
</form>
如果您可以共享您的 Person 和 Category 模型,那么我可以提供更精確的代碼
uj5u.com熱心網友回復:
根據上面的評論:
CS1963 運算式樹可能不包含動態操作
不要依賴于dynamic您的視圖模型。創建為您提供 C# 通常期望的所有靜態型別安全性的類是微不足道的。 dynamic可以是一個有用的工具,但不能替代您不想創建類的任何地方。
您的視圖模型可能很簡單(我猜是一個合理的名稱):
public class CreatePersonVM
{
public IEnumerable<Category> Categories { get; set; }
public Person Person { get; set; }
}
然后你會期望視圖中的型別:
@model CreatePersonVM
并從控制器提供:
var model = new CreatePersonVM();
model.Categories = await _client.GetCategoriesAsync();
model.Person = new Person();
return View(model);
只需確保<form>仍然創建Person物件中的元素并且該表單仍然可以將該物件的值發布到 POST 操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/434500.html
標籤:C# asp.net-mvc
上一篇:JSON反序列化物件回傳null
