首先,我是Umbraco的新手,所以如果您看到一些基本錯誤,請不要評價我。無法將源類型Umbraco.Web.Models.RenderModel綁定到模型類型Repower.Cms.Umbraco.Models.Test
所以我創建目前,他去到數據庫的登錄形式(檢查用戶名和密碼),並讀取他返回的值,並讓他Cannot bind source type Umbraco.Web.Models.RenderModel to model type Repower.Cms.Umbraco.Models.Test.
這是我的HTML:
@inherits Umbraco.Web.Mvc.UmbracoViewPage<Repower.Cms.Umbraco.Models.Test>
@{
Layout = "Master.cshtml";
}
<style type="text/css">
.btnStyle {
border: thin solid #000000;
line-height: normal;
width: 80px;
}
</style>
@using (Html.BeginForm("Test", "MembersProtectedPage", FormMethod.Post))
{
<div class="fontStyle">
<center>
<table style="margin-top: 100px;margin-left:150px">
<tr style="height:30px">
<td align="right">
@Html.LabelFor(m => m.User)
</td>
<td style="width:200px" align="right">
@Html.TextBoxFor(m => m.User)
</td>
<td style="width:250px;color:Red" align="left">
@Html.ValidationMessageFor(m => m.User)
</td>
</tr>
<tr style="height:30px">
<td align="right">
@Html.LabelFor(m => m.Password)
</td>
<td align="right">
@Html.PasswordFor(m => m.Password)
</td>
<td style="width:250px;color:Red" align="left">
@Html.ValidationMessageFor(m => m.Password)
</td>
</tr>
<tr style="height:30px">
<td colspan="2" align="center">
<input type="submit" value="Sign In" class="btnStyle" />
</td>
</tr>
</table>
</center>
</div>
}
這是我的模型:
public class Test : RenderModel
{
public Test() : this(new UmbracoHelper(UmbracoContext.Current).TypedContent(UmbracoContext.Current.PageId)) { }
public Test(IPublishedContent content, CultureInfo culture) : base(content, culture) { }
public Test(IPublishedContent content) : base(content) { }
string connString = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString;
SqlConnection conn;
SqlCommand sqlcomm;
public string User { get; set; }
public string Password { get; set; }
public bool IsUserExist(string emailid, string password)
{
bool flag = false;
conn = new SqlConnection(connString);
conn.Open();
sqlcomm = new SqlCommand();
sqlcomm.Connection = conn;
sqlcomm.CommandType = System.Data.CommandType.StoredProcedure;
sqlcomm.CommandText = "dbo.uspLogin";
sqlcomm.Parameters.AddWithValue("@pLoginName", User);
sqlcomm.Parameters.AddWithValue("@pPassword", Password);
SqlParameter retval = sqlcomm.Parameters.Add("@RESULT", SqlDbType.VarChar);
retval.Direction = ParameterDirection.ReturnValue;
sqlcomm.ExecuteNonQuery(); // MISSING
string retunvalue = (string)sqlcomm.Parameters["@RESULT"].Value;
switch (retunvalue)
{
case "0":
flag = true;
break;
case "1":
flag = false;
break;
case "2":
flag = false;
break;
default:
flag = false;
break;
}
return flag;
}
}
這是我的控制器:
public class TestController : Controller
{
public ViewResult Login()
{
return View();
}
[HttpPost, ValidateInput(false)]
public ActionResult Login(Test model)
{
if (ModelState.IsValid)
{
if (model.IsUserExist(model.User, model.Password))
{
ViewBag.UserName = model.User;
FormsAuthentication.RedirectFromLoginPage(model.User, false);
}
else
{
ModelState.AddModelError("", "Username or Password Incorrect.");
}
}
return View(model);
}
}
因此,我繼承了RenderModel,因爲之前我的錯誤是「傳入字典的模型項目的類型爲Repower.Cms.Umbraco.Models.Test',但此字典需要類型爲」Umbraco「的模型項目。 Web.Models.RenderModel」。」 所以我改變了它(在互聯網上搜索了很多),現在我得到這個錯誤。
其他代碼是否正確?我訪問數據庫的方式和一切?我期待從數據庫返回值(不知道這是否正確)
有人請幫助我嗎? 今天我需要完成這件事。
在此先感謝
太棒了!非常感謝你,這工作!現在在登錄它給我一個錯誤,它說'string retunvalue =(string)sqlcomm.Parameters [「@ RESULT」]。Value;'錯誤是:System.InvalidCastException:'無法將對象鍵入'System.Int32'鍵入'System.String'。' 你有什麼想法可能是什麼?我是否以正確的方式訪問數據庫? 非常感謝! –
數據庫可能返回已更改行數的整數(所以我猜測整數爲1)。您可以使用'sqlcomm.Parameters [「@Result」]。Value.ToString()'或更好,但不會將其強制轉換爲字符串:'int retunvalue = sqlcomm.Parameters [「@ RESULT」]。Value' – Harvey
I made it工作!非常感謝你! –