같은 사람이 양식을 여러 번 보낼 수 기능을 구현 했습니까? XForm 편집기의이 필드를 선택 취소하면 사용자는 양식을 한 번만 제출할 수 있습니다.EPiServer Xforms에서 단일 제출이 어떻게 구현됩니까?
익명 사용자는 쿠키를 기반으로 생각했지만 관련 쿠키는 전선을 통해 볼 수 없습니다. ILSpy에서 EPiServer.XForms.XFormData.HasAlreadyPosted(Page page)
을 보면 영구 옵션이 데이터베이스로 설정되어 있지 않거나 UserName이 null 인 경우 실제로 쿠키를 확인합니다. 그것은 "FormCookie"라는 이름의 쿠키에 대한 확인이 상황에서
private static bool CheckCookieForPostedForm(Guid formId, Page page)
{
HttpCookie httpCookie = page.Request.Cookies["FormCookie"];
if (httpCookie != null)
{
foreach (string text in httpCookie.Values.Keys)
{
if (text.Equals(formId.ToString()))
{
return true;
}
}
return false;
}
return false;
}
나는 익명 사용자로 테스트하고 있습니다 만의 POST에 대한 요청이나 응답에 존재하는 어떤 "FormCookie은"없다 양식 또는 요청 또는 응답 페이지에서 감사합니다 그래서 어떻게 작동하는지 볼 수 없습니다.
익명 사용자의 논리에 따라 데이터베이스에 게시 할 때 UserName이 null이 아닌 경우 일치하는 FormId 및 UserName을 가진 제출을 DDS에서 확인하는 Linq 쿼리가 있습니다. 데이터베이스 (tblXFormData)에서 찾고
public bool HasAlreadyPosted(Page page)
{
if ((this.ChannelOptions & ChannelOptions.Database) != ChannelOptions.Database
|| this.UserName == null)
{
return XFormData.CheckCookieForPostedForm(this.FormId, page);
}
if (Guid.Empty.Equals(this.FormId))
{
throw new InvalidOperationException(
"Cannot read the XFormData before the FormName property has been set");
}
DynamicDataStore store = XFormData.GetStore(this.FormId);
int num = (from post in store.ItemsAsPropertyBag()
where (Guid)post["Meta_FormId"] == this.FormId &&
(string)post["Meta_UserName"] == this.UserName
select post).Count<PropertyBag>();
return num > 0;
}
, 사용자 이름 열에 더 NULL
값이 없습니다. 위의 this.UserName == null
검사가 실패한 경우 익명 사용자의 사용자 이름을 테이블의 사용자 이름과 비교하는 첫 번째 익명 사용자의 빈 사용자 이름과 거짓 긍정을보고있는 Linq 쿼리를 실행하고 있습니까?