Краткий ответ - «нет».
Если вам необходимо вернуть необработанную модель данных вместе с вашим представлением, единственный вариант - вставить данные в представление.Два варианта:
В элементе HTML (что-то вроде неудобного IMO):
<div id="myData" data-model="{"Name": "Jason"}"></div>
В скрипте:
<script>
var myData = {Name: Jason};
</script>
Я предпочитаю второй метод, поскольку тамHTML не ускользает
Я согласен, что это немного раздражает, но один запрос - это один запрос ... это всего лишь один поток данных.Загрузочные данные таким способом довольно распространены, поэтому, возможно, в будущей версии MVC будет более чистый способ их возврата (но, вероятно, это будет выглядеть как один из моих примеров выше).
Вне этого, какВы упомянули, что вы можете сделать дополнительный запрос, чтобы получить только модель в ответе JSON.
РЕДАКТИРОВАТЬ:
У меня был HtmlHelper в рукаве, чтобы помочь с этим...
public static MvcHtmlString ToScriptVariable<T, TMember>(this T value, Expression<Func<T, TMember>> expression) where T : class
{
var member = expression.Body as MemberExpression;
if (member == null)
throw new ArgumentException("Expression must be a member expression.", "expression");
var expressionValue = expression.Compile()(value);
var serializer = new JavaScriptSerializer();
var seralizedData = serializer.Serialize(expressionValue);
var tag = new TagBuilder("script");
tag.Attributes.Add("type", "text/javascript");
tag.InnerHtml = String.Format(CultureInfo.InvariantCulture, "var {0} = {1};", member.Member.Name, seralizedData);
return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
Использование:
<%: Html.ToScriptVariable(x => Model.MyData) %>
Результат:
<script type="text/javascript">var MyData = "(whatever)"</script>