[英]Generating a list of RadioButtons with the same name in a for-loop in an ASP.NET MVC3 view
我正在開發一個ASP.NET MVC3項目,並且PartialView中的for
循環生成的RadioButtons名稱存在問題。
首先,這是我的代碼,下面將解釋確切的問題:
模型FileUploadModel
public class FileUploadModel
{
public HttpPostedFileBase File { get; set; }
public bool IsMainFile { get; set; }
}
模特MyModel
public class MyModel
{
// Some properties
public List<FileUploadModel> Files { get; set; }
}
如何調用PartialView _UploadFiles
@Html.Partial("_UploadFiles", Model) // Model is a MyModel model
PartialView _UploadFiles-這里是問題
@model MyModel
@{
var nbFiles = (Model.Files != null ? Model.Files.Count : 0);
const int NB_DEFAULT_UPLOAD_FIELDS = 3;
}
@for (int i = 0; i < NB_DEFAULT_UPLOAD_FIELDS; i++)
{
@Html.TextBoxFor(m => m.Files[nbFiles].File, new { type = "file", name = "Files", id = "Files" })
@Html.RadioButtonFor(m => m.Files[nbFiles].IsMainFile, "Main ?", new { id = "rb" + i + "_File_IsMain" })
}
因此,這是問題的最后片段。 我想用關聯的RadioButton創建3個上傳字段,以指示文件是否為“主文件”。 但是,使用上面的代碼片段,顯示的視圖就可以了,但是當我驗證表單時,我發布的模型僅上傳了第一張圖片(以及相應的布爾值IsMainFile
,其余的則被忽略了)。 這意味着列表Files
僅包含第一個TextBox和第一個RadioButton數據
因此,我嘗試使用@Html.RadioButtonFor(m => m.Files[i].IsMainFile
,但是RadioButton的名稱不同,因此用戶可以檢查所有RadioButton,這不是理想的行為@Html.RadioButtonFor(m => m.Files[i].IsMainFile
沒有授權我覆蓋RadioButtons的name
,所以我不能給他們自己的名字。
我如何生成這些字段,以便僅可以檢查一個MyModel.Files
屬性包含所有選擇的文件?
謝謝
我認為您最好的選擇是使用編輯器模板 。
首先,創建一個名為FileUploadModel
的視圖,並將其放置在一個名為EditorTemplates
的文件夾中,該文件夾應位於控制器的Views
文件夾下。 請注意,視圖的名稱必須與視圖模型的類的名稱匹配。
其內容如下所示:
@model FileUploadModel
@Html.TextBoxFor(m => m.File, new { type = "file" })
@Html.RadioButtonFor(m => m.IsMainFile, true)
然后,回到"_UploadFiles"
視圖,輸入字段和單選按鈕的標記將更改為:
@model MyModel
using (Html.BeginForm(...
@Html.EditorFor(m => m.Files)
...
請注意,這將自動迭代並為每個FileUploadModel
對象應用該編輯器模板,並根據需要自動為其命名。 當然,這假定已填充模型中的Files
屬性。
您接受帖子的操作應接受MyModel
類型作為其唯一參數,並且所有內容都應在發布時自動綁定。
有一些方法可以避免使用編輯器模板, 並以編程方式構建和命名這些字段 ,但這確實是首選方法,而且更加簡潔。
更具體地針對您的問題... (換句話說,我忘記了上面的代碼不會對單選按鈕進行分組。)
為了使單選按鈕分組有效,應按如下所示設置屬性名稱:
@Html.RadioButtonFor(m => m.IsMainFile, true, new { Name = "IsMainFile" })
案例很重要。 請注意, Name
必須大寫才能生效。 我不確定為什么會這樣。
問題在於,一旦更改了該屬性,該字段將不再自動綁定到帖子中。 不幸的是,但這是設計好的,因為如果您查看請求,我相信您會看到僅發布了選定的單選按鈕值。
因此,您可以將單選按鈕的值更改為可識別的值,因為如果我是對的,則只是IsMainFile
一個實例將顯示在請求中。
也許您可以使用此特定知識來調整現有代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.