我有这样的视图模型:如何使用标准HTML从视图发送值控制器
public class MemberRegisterVM
{
public Users User { get; set; }
public Location Location { get; set; }
}
从User
和Location
模型
用户组成:
public partial class Users : Persons
{
public Guid? UserRoleId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public DateTime? RegisterDate { get; set; }
public DateTime ExpireDate { get; set; }
public bool IsLock { get; set; }
public string DigitalSignture { get; set; }
public Guid? BranchID { get; set; }
public int PersonType { get; set; }
public Guid Token { get; set; }
}
public partial class Users
{
public string NewPassword { get; set; }
public string ConfirmPassword { get; set; }
public string ConfirmDigitalSignture { get; set; }
}
位置:
public class Location
{
public int ID { get; set; }
public int ParentId { get; set; }
public int TypeId { get; set; }
public int Code { get; set; }
public string Name { get; set; }
}
对于单一型号,[for example: User Model]
我知道,如果我用一个标准的HTML输入下面一样,它会送我的数据基础上,以控制器为参考模型及Name attribute
:
查看:
@model User
<input name="UserName" Id="UserName" type="text" />
控制器:
public ActionResult Submit(User user)
{
//user.UserName is filled here
}
现在我的问题是如何命名我的标准HTML元素将数据发送到控制器作为我的视图模型(它由几个模型组成)?使用html.helper我会参考它如下例如:
@Html.TextBoxFor(x => x.User.UserName)
它会像下面?
<input type="Text" name="User.UserName" id="User.UserName">
还是别的什么?因为我已经在上面尝试过了,但它仍然在表单提交时将值作为null发送。
更新:
我已经排除在表单上其他的领域,它们是基于HTML。佣工和传递值正确,但有2场未工作的权利之一将是Gender
和第二会BirthDate
,因为用户模型,从模型的人继承我会在这里一样好:
角色模型:
public class Persons
{
public bool Gender { get; set; }
public Datetime BirthDate { get; set; }
}
这是我的看法
@model Models.MemberRegisterVM
@{
Layout = "~/Views/Shared/_SiteLayout.cshtml";
}
@using Entities.Texts;
@using (@Html.BeginForm("Register", "MembershipAuth", FormMethod.Post))
{
<div class="form-horizontal">
<div class="col-sm-6">
<div class="col-sm-12">
<div class="control-label col-sm-2">
@Labels.Gender
</div>
<div class="col-sm-5">
<input name="User.Gender" type="radio" id="men_gender" value="0" />
<label for="men_gender">@Labels.Male</label>
</div>
<div class="col-sm-5">
<input name="User.Gender" type="radio" id="female_gender" value="1" />
<label for="female_gender">@Labels.Female</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<div class="control-label col-sm-2">
@Labels.BirthDay
</div>
<div class="col-sm-10">
<input type="text" name="User.BirthDate" id="User_BirthDate" />
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<div class="g-recaptcha" data-sitekey="6LfLWCkUAAAAAPSp-Fr8bp5egiX8Pw7oKxzZbkmk" style="text-align: center"></div>
</div>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Sign Up" />
</div>
</div>
</div>
}
,这是我ActionResult
在控制器:
[HttpPost]
[AllowAnonymous]
public ActionResult Register(Models.MemberRegisterVM vm, FormCollection form)
{
//vm.User.Gender is not filled here as well as vm.User.BirthDate
}
是的,它会产生'name'属性(但是'id'属性将会是'id =“User_UserName”'' - 你检查了你生成的html)吗? –
如果你的代码不工作,然后显示它:) –
@StephenMuecke是的,我做过,我假设mvc通过名称属性了解数据,但是当我不想使用HTML.Helpers并使用标准HTML,就像什么HTML.Helpers创建它不会将值发送给控制器,并且我将该值作为空值。 – Valkyrie