基本上我有一個表單,我正在動態添加對象。我正在用AJAX做這件事,所以可以初始化對象並用JSON返回它。每個新對象都有一個唯一的GUID分配給它,因此我們可以在模型集合中的每個對象被傳回到動作中時識別它們。MVC3 - 提交表單時在輸入按鈕上提交自定義輸入屬性
但是,我需要支持非JavaScript,所以我試圖編寫一個解決方案,將回發模型,並添加或刪除模型中給定的對象。在模型上可以有任意數量的這些新對象,所以我需要傳回幾件事情,以便在將模型返回到視圖之前找出要刪除的對象。這可以是:
a)用戶已刪除的對象的GUID。
b)已被點擊以標識要刪除哪個對象的按鈕。
問題是局部視圖是通用的,我想保持它的方式,所以我試圖通過每個局部視圖上的輸入按鈕傳回識別GUID,但不知道如何。我可以很容易地用JavaScript做到這一點,因爲我只是從頁面中刪除創建的AJAX對象,然後發佈它,當用戶單擊刪除鏈接,但無法弄清楚如何使用提交。基本上,我想要做這樣的事情:
@using (Project.Namespace.Infrastructure.Helpers.HtmlPrefixScopeExtensions.HtmlFieldPrefixScope _scope = Html.BeginCollectionItem())
{
<ul class="ulMedicationsControl">
@Html.ActionLink("Remove This Object", "RemoveObject", null)
@Html.Input("RemoveObject", "Remove This Object", new { Prefix = _scope.Prefix, objectGUID = IdentifyingGUID })
@Html.HiddenFor(m => m.IdentifyingGUID);
<li class="liQuestion">
@Html.MandatoryLabelFor(m => m.myField)
@Html.TextBoxFor(m => m.myField)
</li>
</ul>
<div id="@(_scope.Prefix).ajaxPlaceholder"></div>
}
在控制器:
[ActionName("FormName")]
[AcceptParameter(Name = "RemoveObject", Value = "Remove This Object")]
public ActionResult RemoveObject(MyParentModel model, string Prefix, string objectGUID)
{
Guid ID = new Guid(objectGUID);
foreach (ObjectModel object in model.objects){
if (object.IdentifyingGUID == ID)
{
model.objects.Remove(object);
break;
}
}
return View(model);
}
任何幫助我真的很感激,因爲我簡單的不能找出如何做到這一點!
EDIT
而且只是添加前綴屬性簡單地識別,其中在表格對象坐在。這將需要我找到哪個對象列表通過並移除對象,因爲模型中可能存在多個不同的列表。
一個子表的工作方式提交我要刪除的對象,但問題是我再不能從模型收集的對象列表駐留在刪除此。另外,頁面的其餘部分則失去語境即提交子表單時,用戶在表單外的任何其他字段中輸入的任何內容都會丟失。 –
此外,添加此問題的方法與此不同.http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx –
只能看到接近方法1的東西會起作用 - 將數據編碼到按鈕的名稱中。 IIRC有一些瀏覽器(IE最有可能)使用'<按鈕值>' –