如何在 Razor 中单击按钮更改我的模型值?
How can i change my model value on button click in Razor?
目前我正在做一个有两个按钮的项目。
"Windows Login" 和 "Login"。当我点击 "Windows Login" 时,我想提交表单,在提交之前我想将我的模型 choosenProvider
字符串 属性 值更改为 "Windows".
这是我的模型:
public class LogInUserViewModel
{
public LogInUserViewModel() { }
[Required]
[Display(Name = "Name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
public string ReturnUrl { get; set; }
public string ChoosenProvider { get; set; } = "idsrv";
}
这是我的 Razor 页面:
<body>
<div class="background">
<div class="login-area">
<br />
<div class="login-title">Control Unit Registry</div>
<br />
@Html.ValidationSummary(true, "", new { @class = "text-warning-login" })
<div class="holder-form-login">
<div class="form-group">
<div class="text-login">
@Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "input-name-login" } })
@Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-warning-login" })
</div>
</div>
</div>
<br />
<div class="form-group">
<div class="text-login">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "input-password-login" } })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-warning-login" })
</div>
</div>
</div>
</div>
@Html.HiddenFor(x => x.ChoosenProvider)
<div class="form-group">
<div class="holder-button-login">
<br />
<input type="submit" value="Login" class="button-login" />
</div>
</div>
<br />
<br />
<div class="form-group">
<div class="holder-button-login">
<br />
<input type="submit" value="Windows Login" class="button-login" onclick="chooseWindowsProvider()" />
</div>
</div>
<br />
<br />
<br />
<br />
<div class="link-register-login">
<a href="register">Register</a>
</div>
</div>
</div>
</body>
这是我在 razor 中拥有的唯一页面,它完全让我发疯。
你可以看到我正在经历:
@Html.HiddenFor(x => x.ChoosenProvider)
和javascript onclick()
但它没有改变值。
总结一下:
我不知道如何将 choosenProvider
属性 值更改为 "Windows",然后在单击按钮时提交表单。
感谢任何帮助。
好吧,我终于找到了,我希望它能对以后的人有所帮助,另外请注意,intelisense 可能会告诉你字段上的 x 或 y 函数甚至不存在,但它们确实存在。
所以解决办法是先执行js再提交,所以你需要做的是:
- 将按钮类型从
type="submit"
更改为 <input type="button"
- 然后在文件末尾插入以下脚本
<script>
function chooseWindowsProvider() {
document.getElementById('ChoosenProvider').value = 'Windows';
document.getElementById('loginForm').submit();
}
</script>
所以我们基本上是从 js 提交表单而不是从按钮提交表单,这样我们就可以在提交之前分配字符串值。
一些附加信息:
@Html.HiddenFor(x => x.ChoosenProvider)
已经包含一个 ID,因为它的 HTML 结果是:
<input id="ChoosenProvider" name="ChoosenProvider" type="hidden" value="idsrv" />
最后是如何向表单添加 ID:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "loginForm"}))
目前我正在做一个有两个按钮的项目。
"Windows Login" 和 "Login"。当我点击 "Windows Login" 时,我想提交表单,在提交之前我想将我的模型 choosenProvider
字符串 属性 值更改为 "Windows".
这是我的模型:
public class LogInUserViewModel
{
public LogInUserViewModel() { }
[Required]
[Display(Name = "Name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
public string ReturnUrl { get; set; }
public string ChoosenProvider { get; set; } = "idsrv";
}
这是我的 Razor 页面:
<body>
<div class="background">
<div class="login-area">
<br />
<div class="login-title">Control Unit Registry</div>
<br />
@Html.ValidationSummary(true, "", new { @class = "text-warning-login" })
<div class="holder-form-login">
<div class="form-group">
<div class="text-login">
@Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "input-name-login" } })
@Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-warning-login" })
</div>
</div>
</div>
<br />
<div class="form-group">
<div class="text-login">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "input-password-login" } })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-warning-login" })
</div>
</div>
</div>
</div>
@Html.HiddenFor(x => x.ChoosenProvider)
<div class="form-group">
<div class="holder-button-login">
<br />
<input type="submit" value="Login" class="button-login" />
</div>
</div>
<br />
<br />
<div class="form-group">
<div class="holder-button-login">
<br />
<input type="submit" value="Windows Login" class="button-login" onclick="chooseWindowsProvider()" />
</div>
</div>
<br />
<br />
<br />
<br />
<div class="link-register-login">
<a href="register">Register</a>
</div>
</div>
</div>
</body>
这是我在 razor 中拥有的唯一页面,它完全让我发疯。 你可以看到我正在经历:
@Html.HiddenFor(x => x.ChoosenProvider)
和javascript onclick()
但它没有改变值。
总结一下:
我不知道如何将 choosenProvider
属性 值更改为 "Windows",然后在单击按钮时提交表单。
感谢任何帮助。
好吧,我终于找到了,我希望它能对以后的人有所帮助,另外请注意,intelisense 可能会告诉你字段上的 x 或 y 函数甚至不存在,但它们确实存在。
所以解决办法是先执行js再提交,所以你需要做的是:
- 将按钮类型从
type="submit"
更改为 - 然后在文件末尾插入以下脚本
<input type="button"
<script>
function chooseWindowsProvider() {
document.getElementById('ChoosenProvider').value = 'Windows';
document.getElementById('loginForm').submit();
}
</script>
所以我们基本上是从 js 提交表单而不是从按钮提交表单,这样我们就可以在提交之前分配字符串值。
一些附加信息:
@Html.HiddenFor(x => x.ChoosenProvider)
已经包含一个 ID,因为它的 HTML 结果是:
<input id="ChoosenProvider" name="ChoosenProvider" type="hidden" value="idsrv" />
最后是如何向表单添加 ID:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "loginForm"}))