Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 映射到不同模型的列表对象的EditorFor字段?_C#_Sql_Asp.net Mvc_Linq - Fatal编程技术网

C# 映射到不同模型的列表对象的EditorFor字段?

C# 映射到不同模型的列表对象的EditorFor字段?,c#,sql,asp.net-mvc,linq,C#,Sql,Asp.net Mvc,Linq,我的视图中有一个字段集,用户可以同时创建帖子。我有一个标签列表,可以在创建时选择,并在EF中与帖子的多对多关系中关联,这将在保存帖子时在PostTagMap中的Post和Tag之间创建一个关系。但是,我想在视图中添加一个额外的字段,这样用户也可以“创建”标记(键入名称)以及选择标记,但是我无法找出jQuery中的最后一个问题来让它工作 视图: 局部视图: @model MyBlogger.Models.Tag @using(Html.BeginForm()) { // controls fo

我的视图中有一个
字段集
,用户可以同时创建帖子。我有一个
标签列表
,可以在创建时选择,并在EF中与
帖子的多对多关系中关联,这将在保存帖子时在
PostTagMap
中的
Post
Tag
之间创建一个关系。但是,我想在视图中添加一个额外的字段,这样用户也可以“创建”标记(键入名称)以及选择标记,但是我无法找出jQuery中的最后一个问题来让它工作

视图:

局部视图:

@model MyBlogger.Models.Tag
@using(Html.BeginForm())
{
  // controls for Tag
  ....
  <button id="createtag" type="button">Create</button>
}
剧本

var dialog = $('#dialog');
var tags = $('#tags');
var url = '@Url.Action("CreateTag")';
$('#addtag').click(function() {
  dialog.show();
});
$('#createtag').click(function() {
  var form = $(this).closest('form');
  $.post(url, form.serialize(), function(data) {
    if(data) {
      var id = tags.children('.tag').length;
      var div = $('<div></div>').addClass('tag');
      .... stuck here
      div.append($('<label></label>').attr('for', id).text(data.Name));
      tags.append(div);
      form.get(0).reset(); // reset controls to their defaults
      dialog.hide(); // hide the dialog
    }
var dialog = $('#dialog');
var tags = $('#tags');
var url = '@Url.Action("CreateTag")';
$('#addtag').click(function() {
  dialog.show();
});
$('#createtag').click(function() {
  var form = $(this).closest('form');
  $.post(url, form.serialize(), function(data) {
    if(data) {
      var id = tags.children('.tag').length;
      var div = $('<div></div>').addClass('tag');
      div.append($('<input/>').val(data.ID).attr({ type: 'checkbox', name: 'selectedTags', id: id }).prop('checked', true));
      div.append($('<label></label>').attr('for', id).text(data.Name));
      tags.append(div);
      form.get(0).reset(); // reset controls to their defaults
      dialog.hide(); // hide the dialog
    }
  });
});
var dialog=$('#dialog');
变量标记=$(“#标记”);
var url='@url.Action(“CreateTag”);
$('#addtag')。单击(函数(){
dialog.show();
});
$('#createtag')。单击(函数(){
var form=$(this).closest('form');
$.post(url,form.serialize(),函数(数据){
如果(数据){
var id=tags.children('.tag').length;
var div=$('').addClass('tag');
……被困在这里
div.append($('').attr('for',id.).text(data.Name));
附加标签(div);
form.get(0.reset();//将控件重置为默认值
dialog.hide();//隐藏对话框
}

在控制器中创建其他方法,以创建新的
标记

后置控制器

[ChildActionOnly]
public ActionResult CreateTag()
{
  Tag model = new Tag();
  return PartialView(model);
}

[HttpPost]
public ActionResult CreateTag(Tag model)
{
  // Save the Tag
  db.Tags.Add(model);
  db.SaveChanges();
  return Json(new { ID = model.Id, Name = model.Name });
}
// Returns a partial view with a form to create a new Tag
[ChildActionOnly]
public ActionResult CreateTag()
{
  Tag model = new Tag();
  return PartialView(model);
}

[HttpPost]
public ActionResult CreateTag(Tag model)
{
  // Save the Tag
  db.Tags.Add(model);
  db.SaveChanges();
  return Json(new { ID = model.Id, Name = model.Name });
}
局部视图

@model MyBlogger.Models.Tag
@using(Html.BeginForm())
{
  // controls for Tag
  ....
  <button id="createtag" type="button">Create</button>
}
@model MyBlogger.Models.Tag
@使用(Html.BeginForm())
{
//标签的控件
....
创造
}
主视图

@model MyBlogger.Models.Post
@using(Html.BeginForm())
{
  // controls for Post
  ....
  <div id="tags">
    // not sure what you trying to do with you existing code, but
    for (int i = 0; i < tag.Count; i++)
    {
      var id = string.Format("tag{0}", tag[i].Id);
      var isChecked = tag[i].IsAssigned ? "checked" : null;
      <div class="tag">
        <input id="@id" type="checkbox" name="selectedTags" value="@tag[i].Id" @isChecked />
        <label for="@id">@tag[i].Name</label>
      </div>
    }
  </div>
  <button id="addtag" type="button">Add new tag</button>
  ....
}
<div id="dialog" style="display:none">
  @Html.Action("CreateTag")
</div> // outside main form tags!
@model MyBlogger.Models.Post
@使用(Html.BeginForm())
{
//邮政管理
....
//不确定您试图用现有代码做什么,但是
for(int i=0;i
剧本

var dialog = $('#dialog');
var tags = $('#tags');
var url = '@Url.Action("CreateTag")';
$('#addtag').click(function() {
  dialog.show();
});
$('#createtag').click(function() {
  var form = $(this).closest('form');
  $.post(url, form.serialize(), function(data) {
    if(data) {
      var id = tags.children('.tag').length;
      var div = $('<div></div>').addClass('tag');
      .... stuck here
      div.append($('<label></label>').attr('for', id).text(data.Name));
      tags.append(div);
      form.get(0).reset(); // reset controls to their defaults
      dialog.hide(); // hide the dialog
    }
var dialog = $('#dialog');
var tags = $('#tags');
var url = '@Url.Action("CreateTag")';
$('#addtag').click(function() {
  dialog.show();
});
$('#createtag').click(function() {
  var form = $(this).closest('form');
  $.post(url, form.serialize(), function(data) {
    if(data) {
      var id = tags.children('.tag').length;
      var div = $('<div></div>').addClass('tag');
      div.append($('<input/>').val(data.ID).attr({ type: 'checkbox', name: 'selectedTags', id: id }).prop('checked', true));
      div.append($('<label></label>').attr('for', id).text(data.Name));
      tags.append(div);
      form.get(0).reset(); // reset controls to their defaults
      dialog.hide(); // hide the dialog
    }
  });
});
var dialog=$('#dialog');
变量标记=$(“#标记”);
var url='@url.Action(“CreateTag”);
$('#addtag')。单击(函数(){
dialog.show();
});
$('#createtag')。单击(函数(){
var form=$(this).closest('form');
$.post(url,form.serialize(),函数(数据){
如果(数据){
var id=tags.children('.tag').length;
var div=$('').addClass('tag');
div.append($('').val(data.ID).attr({type:'checkbox',name:'selectedTags',ID:ID}).prop('checked',true));
div.append($('').attr('for',id.).text(data.Name));
附加标签(div);
form.get(0.reset();//将控件重置为默认值
dialog.hide();//隐藏对话框
}
});
});
有关如何设置对话框和标记复选框及其标签样式的示例,请参阅

旁注:

  • 我强烈建议您开始使用视图模型仅表示 需要在视图中显示/编辑的特性
  • 表格用于表格数据,而不是布局

  • 最好使用一个弹出表单来创建新标签,然后使用ajax将其发布到一个控制器,该控制器保存它并返回指示其新id和显示名称的json,并使用该json使用新的复选框更新DOM给我一两个小时来完成我的工作,我将给你一个简化的示例。但是你确实需要开始使用view表示要编辑内容的模型:)因为这是正确的方法。你只是还没有意识到你可能会面临的问题,特别是如果你开始向属性添加验证属性。当然,过度发布攻击也会有问题。如果你使用这样的工具,将视图模型映射到数据模型,反之亦然是很容易的。仅此一项
    @Html.HiddenFor(model=>model.BlogUserEmail,User.Identity.Name)
    是一个问题。保存对象时,不应将其包含在视图中,而应在POST方法中设置其值。注释不用于扩展讨论;此对话已被取消。