我承認我是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);
}
}
您需要包含您的視圖和控制器 – 2014-10-28 10:18:55
只要您部分呈現具有與您的模型屬性名稱匹配的名稱屬性的輸入,那麼它們將綁定到您的模型。但你提到了一系列問題。在這種情況下,使用partial將無法正常工作,因爲它不會正確索引您的屬性,並且如果您在partial中有任何複選框,則「FormCollection」也不會工作。請注意,您不需要@ Html.Partial中的第三個參數(您已經在第二個參數中傳遞了模型) – 2014-10-28 10:47:37
@StephenMuecke我知道第三個參數 - 那就是我在試圖讓事情堅持下去。如果可能的話,我希望'QuestionPlaceholder'始終返回一個字符串(可能是最極端情況下的JSON) - 但是,該字符串需要從底層控件「解析」,並且在那裏我有點丟失。 – Shaamaan 2014-10-28 11:10:28