我想我只需要有人向我展示这一点。
我有一个火花部分
_MessageItem.spark
在视图中使用
喜欢这样
<for each="var m in messageList">
<MessageItem message="m"/>
</for>
部分看起来像这样:
<tr id="${message.MessageId}">
<td >${message.CreateDate.ToString("M/d/yy h:mm")}</td>
<td >
<b>${message.Subject}</b>
</td>
<td >${message.FromUser.FullName}</td>
<td >${message.ToUser.FullName}</td>
</tr>
<tr>
<td/>
<td colspan="3">${message.Body}</td>
</tr>
就像一个冠军,除非我尝试直接从这样的动作中调用部分:
public ActionResult GetMessage(Message message)
{
return PartialView("MessageItem",message);
}
当我这样做时,我得到了
error CS0103: The name 'message' does not exist in the current context
所以我目前的解决方案是创建一个包含MessageItem部分
的包装器部分 像这样: _ActionMessageItem.spark:<MessageItem message="(Message)ViewData.Model"/>
有人可以陈述明显的并告诉我如何修改
1)修改我的MessageItem部分,以便无论是从PartialView()调用还是在.spark文件中调用它都可以使用
2)告诉我如何修改我的控制器动作,这样就不会抛出异常
答案 0 :(得分:2)
<viewdata model="Message" message="Message" />
<var msg="message ?? Model" />
然后使用msg变量而不是消息(例如,$ {msg.Subject}等)。
您可能还有运气添加单
<default message="Model" />
但第一种方式是我认为可行的方式。
答案 1 :(得分:0)
尝试使用下划线和匿名对象调用partial。
ViewData["message"] = message;
return PartialView("_MessageItem");
答案 2 :(得分:0)
当您传递参数PartialView
时,spark不知道您的参数名称,只知道传入的值。因此,它使用参数的名称,我相信它是模型即可。由于您的代码正在查找参数消息,因此会引发错误。我认为一个解决方案可能是改变这样的事情:
<MessageItem model="(Message)ViewData.Model"/>
模型可能会被设置为模型,您必须猜测并检查。
答案 3 :(得分:0)
问题在于,当您从操作中调用它时,您将数据作为模型传递,但是当从另一个视图调用时,您将数据作为参数传递。如果另一个视图也共享相同的Model对象类型,则只能将数据用作Model。
否则,我要做的是在你的Action中将它传递给ViewData:
public ActionResult GetMessage(Message message)
{
ViewData["message"] = message;
return PartialView("MessageItem");
}