我正在编写我的第一个MVC应用程序(MVC4)。很多都是使用VS2010中出色的Razor工具生成的,但现在我遇到了一堵墙,我觉得我不明白一些基本的东西。
在我的应用中,
我想要做的是让用户编辑客户的详细信息,并在同一页面上编辑自己的帐户详细信息。
我尝试使用Html.Partial将UserProfile视图添加到客户端视图,但它试图将UserProfile视图传递给客户端模型。
如何让Client视图调用UserProfile controller ,以便它可以读取User.Identity并返回正确的UserProfile视图?
我尝试将其作为一个viewmodel,同时附加了client和userprofile类,并在一个屏幕上完成所有操作,但是在提交时拒绝向控制器发送值。
客户视图:
@model MyProject.Client
<div>
@Html.Partial("_AcctDetailsPartial")
</div>
<div>
@using (Html.BeginForm())
{
.
.
.
@Html.HiddenFor(model => model.ClientID)
{
.
.
.
<client fields>
{
.
.
.
<div class="form-actions">
<button type="submit" name="ButtonName" value="Company" class="btn blue"><i class="icon-ok"></i> Save</button>
<button type="button" class="btn">Cancel</button>
</div>
}
</div>
UserProfile查看:
@model Surecall.UserProfile
<div style="height: auto;" id="accordion1-1" class="accordion collapse">
@using (Html.BeginForm())
{
<h3 class="form-section">Personal Info</h3>
<label class="control-label">First Name</label>
@Html.TextBoxFor(m => m.FirstName, new { @class = "m-wrap span8", @id="FirstName" })
<label class="control-label">Last Name</label>
@Html.TextBoxFor(m => m.Surname, new { @class = "m-wrap span8" })
<label class="control-label">Phone Number</label>
@Html.TextBoxFor(m => m.Mobile, new { @class = "m-wrap span8" })
<label class="control-label">Email</label>
@Html.TextBoxFor(m => m.Email, new { @class = "m-wrap span8" })
<label class="control-label">Position</label>
@Html.TextBoxFor(m => m.Occupation, new { @class = "m-wrap span8" })
<label class="control-label">Interests</label>
@Html.TextBoxFor(m => m.Interests, new { @class = "m-wrap span8" })
<div class="form-actions">
<button type="submit" name="SaveLoginDetails" value="SaveUser" class="btn green"><i class="icon-ok"></i> Save</button>
<button type="button" class="btn">Cancel</button>
</div>
}
</div>
答案 0 :(得分:1)
您正在寻找的是Viewmodel。 现在,您的控制器将返回一个由“Client”类/模型组成的视图。但是你想要一个由Client + UserProfile组成的视图。
我不考虑工作,存储库和类似模式。您首先需要创建viewmodel
public class ClientUserProfileVM()
{
public Client client {get; set; }
public UserProfile user { get; set; } //use actual Usermodel here
}
在你的控制器中写下这样的东西
public ActionResult GetClientAndUser()
{
ClientUserProfileVM viewmodel = here comes some LINQ magic
select new ClientUserProfileVM {
client,
user
};
return View(viewmodel);
}
通过这种方式,您可以为自己的视图提供一个视图模型,该视图由客户和用户组成,您可以在视图中使用@model.user
或@model.client
进行访问
有很多相互关联的链接: