La réponse courte est "non".
Si vous devez renvoyer un modèle de données brutes à côté de votre vue, la seule option est d'intégrer les données dans la vue. Les deux options sont les suivantes :
Dans un élément HTML (ce qui est plutôt gênant pour l'IMO) :
<div id="myData" data-model="{"Name": "Jason"}"></div>
Dans script :
<script>
var myData = {Name: Jason};
</script>
Je préfère la deuxième méthode car il n'y a pas d'échappement HTML.
Je suis d'accord pour dire que c'est un peu ennuyeux de devoir faire ça, mais une demande est une demande... c'est juste un flux de données. Le bootstrapping de données de cette manière est assez commun, donc peut-être qu'une future version de MVC aura une manière plus propre de le retourner (mais cela ressemblerait probablement à un de mes exemples ci-dessus).
En dehors de cela, comme vous l'avez mentionné, vous pouvez faire une demande supplémentaire pour recevoir uniquement le modèle dans une réponse JSON.
EDITAR:
J'avais un HtmlHelper dans ma manche pour aider avec ça...
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));
}
Utilisation :
<%: Html.ToScriptVariable(x => Model.MyData) %>
Résultat :
<script type="text/javascript">var MyData = "(whatever)"</script>