2014-10-28 61 views
0

我承認我是MVC的新手,這個問題可能是RTFM的一個例子。但我用Google搜索這個問題,我似乎無法找到解決方案。從ViewUserControl獲取輸入回到控制器提交

我有一個簡單的視圖用於填寫特定模型的一些細節。我需要使用Html.Partial來呈現表單的一部分(實際上,這是一個用於呈現來自另一個項目的舊的非MVC控件的包裝器)。

我沒有問題從控制器獲取數據進入視圖。

那麼這有什麼問題?在用戶按下提交按鈕後,如何從局部視圖獲取用戶輸入回控制器?


這裏是目前我已經得到了視圖和控制器:

@model Poll 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>Poll</h4> 
     <hr /> 
     @*@Html.ValidationSummary(true)*@ 
     @Html.HiddenFor(m => m.Id) 
     @Html.HiddenFor(m => m.Name) 
     @Html.Partial("~/ControlPlaceholder/QuestionPlaceholder.ascx", Model, new ViewDataDictionary(Model)) 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Fill" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

視圖已幾乎一到一個從MVC5提供的標準產生的編輯視圖複製。請注意,目前這只是一個PoC - 通常整個事情應該爲Poll中的每個問題提供QuestionPlaceholder

這裏是控制器的相關部分:

// 
    // GET: /Poll/Fill 
    [HttpGet] 
    public ActionResult Fill(Guid id) 
    { 
     var poll = pollRepository.Get(id); 
     return View(poll); 
    } 

    // 
    // POST: /Poll/Fill 
    [HttpPost] 
    public ActionResult Fill(Poll poll, FormCollection collection) 
    { 
     try 
     { 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(poll); 
     } 
    } 
+0

您需要包含您的視圖和控制器 – 2014-10-28 10:18:55

+0

只要您部分呈現具有與您的模型屬性名稱匹配的名稱屬性的輸入,那麼它們將綁定到您的模型。但你提到了一系列問題。在這種情況下,使用partial將無法正常工作,因爲它不會正確索引您的屬性,並且如果您在partial中有任何複選框,則「FormCollection」也不會工作。請注意,您不需要@ Html.Partial中的第三個參數(您已經在第二個參數中傳遞了模型) – 2014-10-28 10:47:37

+0

@StephenMuecke我知道第三個參數 - 那就是我在試圖讓事情堅持下去。如果可能的話,我希望'QuestionPlaceholder'始終返回一個字符串(可能是最極端情況下的JSON) - 但是,該字符串需要從底層控件「解析」,並且在那裏我有點丟失。 – Shaamaan 2014-10-28 11:10:28

回答

1

它是如此簡單,只需一組輸入與對應的動作參數名稱,讓MVC模型綁定器做的工作。在表單中渲染一個部分並不重要,它的輸入元素值將被傳遞給提交表單上的操作。 另一種方法是使用Request.Form [「InputName」],這不是我的第一個建議。

+0

由於我使用佔位符渲染**老式輸入控件**,我不認爲依靠自動化的'ModelBinder'是一個好主意... – Shaamaan 2014-10-28 10:29:33

+0

爲什麼你這麼認爲?嘗試一下。 – 2014-10-28 11:24:08

+0

因爲問題是使用'@ foreach'生成的,所以我不能指定ID,因爲它們會被重複。理想情況下,我想讓每個佔位符在用戶按下提交時分別「處理」它的內容。 – Shaamaan 2014-10-28 14:54:11