0

在我的控制器中,我将一个对象列表发送到视图 ( index.cshtml)

return View(AdsPrevModel);

在我的index.cshtml

<div id ="ele">
    <ul>
        <li> name1<input id="a1" type="checkbox"/></li>
    </ul>
</div>

当用户单击复选框时,我使用 jquery 来了解用户是否选中了该框:

我的 javascript 文件:

$('#ele :checkbox').click(function () {
    if ($(this).is(':checked')) {
        alert($(this).attr('id'));
    } else {
        alert('unchecked');
    }
});

如何将 AdsPrevModel 放入我的 js 文件中?

我知道我可以做这样的事情:

在我的 html 中,添加:

<input type="hidden" id="AdsPrevModel" value="@Model.AdsPrevModel" />

在js中:

var adsPrevModel = JSON.parse(document.getElementById('AdsPrevModel').value);

在我的 html 中没有添加隐藏输入的情况下还有其他选择吗?

在 js 文件中可能类似于以下内容:

var adsPrevModel = JSON.parse(Model.AdsPrevModel));
4

2 回答 2

2

最佳做法是

对该控制器进行 ajax 调用,该控制器应返回 json 结果

return JSON( model ) ; 
于 2013-10-01T16:40:08.640 回答
1

在您共享的代码中,没有任何东西将模型发送到客户端,因此 JavaScript 代码目前没有直接访问它的方法。

由于您将视图绑定到模型,因此视图可以以各种方式包含它。它可能是模型成员的一系列隐藏字段(不是整个模型,除非它可以整体表示为字符串)。像这样的东西:

@Html.HiddenFor(x => x.SomeField)
@Html.HiddenFor(x => x.AnotherField)

这将为input模型上的两个字段创建两个 hidden 。根据模型的复杂程度,这可能会变得很麻烦。

您也可以以类似的方式直接将模型发送到 JavaScript 代码:

var someField = @Model.SomeField;
var anotherField = @Model.AnotherField;

同样,如果模型很复杂,这很快就会变得很麻烦。即使您尝试从中构建一个实际的 JavaScript 对象:

var theModel = {
    someField : @Model.SomeField,
    anotherField : @Model.AnotherField
};

(另请注意,当您像这样混合 razor 语法和 JavaScript 时,我已经看到 Visual Studio 变得非常困惑。在 2012 年不再如此,但在 2010 年很多。)

您可能会使用类似的JavaScriptSerializer东西在模型上为自身的序列化版本添加属性。我以前从未这样做过,但它应该可以工作。模型上有这样的东西:

public string SerializedCopy
{
    get
    {
        return new JavaScriptSerializer().Serialize(this);
    }
}

不过,可能需要进行一些调整才能使其正常工作。

最后,一个只需要向服务器发出另一个请求的特别干净的选项是有另一个只返回该模型的 JSON 版本的操作。像这样的东西:

public ActionResult SomeActionName()
{
    // get the model somehow, then...
    return Json(AdsPrevModel);
}

然后,您的 JavaScript 代码只需调用此操作即可获取代表整个模型的 JSON 对象:

var theModel = {};
$.get('@Url.Action("SomeActionName", "SomeController")', function (data) {
    // maybe do some error checking here?
    theModel = data;
});

然后,如果您的实际视图实际上没有将任何东西绑定到模型,那么返回该视图的操作不需要获取模型并将其提供给视图。JavaScript 代码将通过调用返回 JSON 数据而不是视图的其他操作来获取模型。

于 2013-10-01T16:45:23.910 回答