gpt4 book ai didi

c# - 通过 Web.Config 参数动态生成 View

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:51 25 4
gpt4 key购买 nike

我正在使用 ASP.NET MVC 开发多语言 Web 应用程序。但有些语言是可选的。例如,用户在屏幕上看到两个文本框。其中一个用于英语,另一个用于法语。我想通过 web.config 动态创建文本框。如果 web.config 中的“ActiveLanguageList”有语言代码,那么应用程序会为该语言创建一个文本框。但我无法从我的 View 模型动态创建它。我必须手动编写 HTML 帮助程序。我想用循环等动态创建它们...因为 HTML 页面中的国家代码是不同的。例如“ContentNameEn”、“ContentNameFr”感谢您的建议。

//in my setting class
var ActiveLangs = new List<string>(); //For example EN,FR

//in web.config
<add key="Languages" value="EN,FR"/>

//in my view model
[DisplayName("English Content Name")]
public string ContentNameEn { get; set; }

[DisplayName("French Content Name")]
public string ContentNameFr { get; set; }


//in myview
<div class="form-group">
<label class="control-label col-md-2" for="ContentName">Content Name(EN)</label>
<div class="col-md-4">
@Html.TextBoxFor(model => model.ContentNameEn, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ContentNameEn)
</div>
</div>

<div class="form-group">
<label class="control-label col-md-2" for="ContentName">Content Name(FR)</label>
<div class="col-md-4">
@Html.TextBoxFor(model => model.ContentNameFr, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ContentNameFr)
</div>
</div>

//i want to code in the view like this but i can't
@foreach(var langCode in ActiveLangs){
//i need here create langCode's html code with htmlhelper
//@Html.TextBoxFor
//@Html.LabelFor
}

最佳答案

因为要生成的文本框数量未知,所以您的模型需要是一个集合。你的 View 模型应该是

public class ContentVM
{
public string LanguageCode { get; set; }
public string LanguageName { get; set; } // used for the label
[Required]
public string ContentName { get; set; }
}

然后在 Controller 中,创建一个集合。请注意,您在 Web.Config 中存储代码的方法可能需要更改以允许您也存储语言名称(xml 文件可能是更好的解决方案)。例如

List<ContentVM> model = new List<ContentVM>();
foreach (var language in ...)
{
model.Add(new ContentVM(){ LanguageCode = language.Code, LanguageName = language.Name };
}
return View(model);

然后你会看到

@model List<ContentVM>
....
@using (Html.BeginForm())
{
for(int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(m => m[i].LanguageCode)
@Html.LabelFor(m => m[i].ContentName, Model[i].LanguageName)
@Html.TextBoxFor(m => m[i].ContentName)
@Html.ValidationMessageFor(m => m[i].ContentName)
}
<input type=submit" ... />
}

在 POST 方法中

public ActionResult Edit(List<ContentVM> model)
{
// loop through the collection to get each ContentName and the associated LanguageCode
}

关于c# - 通过 Web.Config 参数动态生成 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com