【问题标题】:Post form values using JS without elements? [closed]使用没有元素的 JS 发布表单值? [关闭]
【发布时间】:2013-06-07 12:24:45
【问题描述】:

我有一个带有属性的模型,其中一个是集合。

我想要一个客户端 JS 函数,用一些值设置该集合(或通过单独的参数或通过我不太熟悉的模型绑定器将其发送到控制器操作)。

这怎么可能?

【问题讨论】:

  • 是的,这是可能的,为此您需要通过javascript创建路由并创建一个函数来捕获url的值,或者使用backbonejs,这已经给了你这种东西( backbonejs.org/#Router)
  • 你能把这个作为答案发布吗?模型绑定呢?

标签: javascript asp.net-mvc forms http-post


【解决方案1】:

您可以使用 JSON 发送任意复杂的结构:

$.ajax({
    url: '/somecontroller/someaction',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({
        id: 123,
        items: [
            { foo: 'bar 1' },
            { foo: 'bar 2' },
            { foo: 'bar 3' }
        ]
    }),
    success: function(result) {
        alert('ok');
    }
});

您的控制器操作将采用与 JSON 结构匹配的视图模型:

[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
    ...
}

这是与此示例结构匹配的模型定义:

public class MyViewModel
{
    public int Id { get; set; }
    public ItemViewModel[] Items { get; set; }
}

public class ItemViewModel
{
    public string Foo { get; set; }
}

【讨论】:

  • 我没有使用JS发布值,我正在定期提交表单,我只是不知道如何在发布的表单中设置模型的集合属性。也许伪造元素是最好的方法(即生成隐藏元素并将其name 属性设置为Model.CollectionProperty[0]Model.CollectionProperty[1] 等),是这样吗?
  • 如果您定期发布表单,那么您应该尊重默认模型绑定器使用的输入字段的标准命名约定:haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx 如果您要使用隐藏字段,您可以像这样生成它们那个:@Html.HiddenFor(x => x.CollectionProperty[index].SomeSubProperty).
  • 如果您在答案中包含您的评论会很好,以供参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多