2016-11-24 37 views
0

蔭Asp.net網絡表單開發和正在努力學習.NET MVC 5. 我知道該怎麼做,只有靜態的HTML標籤的局部視圖在MVC 5如何在mvc 5發佈數據獲取部分視圖?

但我可以在一個MVC局部視圖也有形式與文本框和提交buttion?

如果是,那麼我在哪裏寫回發函數的這部分視圖獲取其發佈的值,在哪個控制器?

+0

我想你應該使用編輯器模板來代替。這可以將您的模型的一部分,併爲他們分配值。具有表單值的編輯器將最終放入html中的客戶端。表單發佈後,所有名稱值對都將被髮送,並且如果服務器Action上有相應的名稱(模型參數),則它們將被綁定。換句話說,您將有權訪問該主頁控制器的控制器操作中的編輯器模板值。 –

回答

0

是的,您也可以在部分視圖中有文本框和提交按鈕。例如

例如,假設您有一個產品應用程序,並且您的主頁(View)正在顯示所有可用的產品。 所以爲了顯示你需要通過一個模型

@model IList<xyzRetailer.ViewModels.ProductViewModel> 
@{ 
    ViewData["Title"] = "Home Page"; 
} 

的產品,你可以讀到這樣的價值:如果你想擁有AA局部視圖

<div class="col-md-3"> 
     <h2>Product Categories</h2> 
       <ul> 
      @foreach (var item in Model.Select(a=>a.Category).Distinct()) 
      { 
       <li>@item</li> 
      } 
     </ul> 
    </div> 

我們您的問題與不同的視圖模型,你可以與元組或您可以創建一個新的對象,只是爲了部分視圖,而像下面這樣調用它:

@Html.Partial("_AddProduct", new yzRetailer.ViewModels.ProductViewModel()) 

,你的部分觀點將類似下面:

@model xyzRetailer.ViewModels.ProductViewModel 
     @using (Html.BeginForm("Create", "Home", FormMethod.Post)) 
     { 
    <div class="input-group"> 
@Html.TextBoxFor(model => model.Id, new { @class = "hidden" }) 
@Html.TextBoxFor(model => model.Category, new { @class = "form-control" }) 
</div><input type="submit" value="Save" class="btn btn-primary btn-block" /> 
    } 

而控制器代碼應該首頁 - >創建您在@ Html.BeginForm提到。

public async Task<IActionResult> Create(ProductViewModel product) 
    { 
     if (!ModelState.IsValid) 
     { 
      return this.BadRequest(ModelState); 
     } 

     if (string.IsNullOrEmpty(product.Id)) 
     { 
      var result = await _catelogueManager.AddAsync(product); 
     } 
     else 
     { 
      var result = await _catelogueManager.UpdateAsync(product.Id, product); 
     } 
     var products = await _catelogueManager.GetAllAsync(); 
     return View("Index", products); 
    } 
相關問題