我相信这个问题曾经问过一次,而且反应太少了。我真的需要帮助,所以我会试试运气。
我在MVC 5中构建了一个问卷Web应用程序。上图显示了实体关系系统的一部分。我已经创建了模型,创建了表格,已经输入了一些测试数据,完整性和验证效果很好。
我遇到的困难是让用户创建一个新的调查问卷(QuestionnaireHeader),它在标题上的其他字段(如果有的话)(QuestionnaireAdditionalField),并将其分类(QuestionnaireCategories)相同的观点。
我尝试创建一个与表实体模型分开的ViewModel,并在视图中使用它...
public class CreateHeaderViewModel
{
public QuestionaireHeader QuestionaireHeader {get; set;}
public QuestionaireAdditionalField QuestionaireAdditionalField {get; set;}
public QuestionaireCategory QuestionaireCategory {get; set;}
}
控制器:
[HttpGet]
public ActionResult Create()
{
string userid = GeneralHelpers.GetUserId();
(...stuff...)
// Setting the foreign key value for Language, from it's table, and passing it to the view. No problems here.
Guid CurrentLang = db.Language.Single(L => L.LangCulture == c).LangID;
// The next code looks sloppy but it's the only way I've achieved
// to effectively pass a relationship to the view and obtain
// intellisense over there for each field...
CreateHeaderViewModel VM = new CreateHeaderViewModel();
VM.QuestionaireHeader = new QuestionaireHeader();
VM.QuestionaireAdditionalField = new QuestionaireAdditionalField();
VM.QuestionaireCategory = new QuestionaireCategory();
VM.QuestionaireHeader.ApplicationUserId = userid;
VM.QuestionaireHeader.Public = true;
VM.QuestionaireHeader.LangID = CurrentLang;
return View(VM);
}
在视图中,如果我想访问QuestionaireAdditionalField,例如,我可以像这样:
问题在于,由于表之间存在一对多关系,因此我无法在子表中创建记录而无需在父表(QuestionaireHeader)中创建记录。
我开始使用JQuery解决此问题,并让用户选择各个控件中的Categories和Additional Fields。 这不会写入数据库,所以我需要将所有这些相关数据发送回服务器,然后写入数据库。这是我迷路的地方,因为我可以将子组合在一个Json文件中,但是如何将它有效地连接到父级,然后通过Ajax发送呢?这似乎不是正确的做法。
我有一种直觉,就是必须有一种更简单的方法将这些相关数据传回控制器以写入数据库
一旦我在控制器中有数据,我就可以写入数据库没有问题。
请帮助!!