我的项目中有两个用于多语言的数据库表:
Word -ID- -En- -Ge-
1 Hello Hallo
2 Yes Ja
Lang -ID- -Name- -FlagFileName-
1 English flag-en.jpg
2 Deutsch flag-ge.jpg
但是,我需要能够在系统中添加新语言。我可以向Lang表添加一个新行,向Word表添加一个新列,但是我无法在ASP.NET MVC3项目中更新DBContext对象。我的模型中的数据库对象。
public class Word
{
public int ID { get; set; }
public string English { get; set; }
public string Deutsch { get; set; }
}
public class Language
{
public int ID { get; set; }
public string Name { get; set; }
public string ImageFileName { get; set; }
}
我需要一种定义Word的方法,因为可以添加新语言。如何更新Word对象?这在某种程度上是否可行?
我在处理动态视图时遇到问题:
@{
Type objectType = Type.GetType(typeof(MyProjectNamespace.Models.Word).AssemblyQualifiedName);
System.Reflection.PropertyInfo[] fields = objectType.GetProperties();
}
<table>
@foreach (System.Reflection.PropertyInfo f in fields)
{
<th> @f.Name.ToString() </th>
}
@foreach (var item in Model) {
<tr>
@foreach (System.Reflection.PropertyInfo f in fields)
{
<td>@Html.DisplayFor(modelItem => item.English)</td>
<td>@Html.DisplayFor(modelItem => item.Deutsch)</td>
<td>//How can I display for a new Language here?</td>
}
</tr>
}
</table>
我可以获取Word的每个属性并使用下面的代码将它们打印为Headers,但是如何在这些动态属性中打印值?这可行吗?
我很欣赏任何想法,我甚至准备重新创建表格。
答案 0 :(得分:0)
我决定变得简单。处理动态Model对象并获取动态属性可能是可行的,但不值得。所以我决定需要一个Word表格,如:
Lang -ID- -Name- -FlagFileName-
1 English flag-en.jpg
2 Deutsch flag-ge.jpg
Word -ID- -Text- -LanguageID-
1 Hallo 2
2 Hello 1
3 Yes 1
4 Ja 2
因为在添加新语言时,单词不会站在数学索引中,例如:
--indexed-- --index broken--
1-English Word 1-English Word
2-German Word 2-German Word
3-English Word 3-Spanish Word
4-German Word 4-Dutch Word
计算机无法理解具有%100可靠性的单词的含义,我决定持有一个只有英文单词的含义表:
Meaning -ID- -Text-
1 Hello
2 Yes
将意义与实际的词语联系起来:
Word -ID- -Text- -LanguageID- -MeaningID-
1 Hallo 2 1
2 Hello 1 1
3 Yes 1 2
4 Ja 2 2
我将WordID分配给新的动态元素,例如“新类型”,它将用于填充某处的下拉框。现在我将它绑定到一个MeaningID。
我猜这个解决方案清晰易懂,易于实施。如果一些明确的解决方案可能会出现在我目前的表格中,我将不会接受我自己的答案一周。